Мой веб-сервис возвращает данные, я заменяю ненужный символ и получаю действительную строку.
Как переносится строка в объект.
Пример 1: статические данные (а не веб-службы) работают нормально.
$scope.str = [];
str = {"car": [{"id": 11,"name": "BMW",}, {"id": 22,"name": "Toyota"}],};
$scope.data = str;
Пример 2: данные из веб-службы не работают
str = data;
str.replace("?", "").replace("(", "").replace(")", "").replace(";", "");
$scope.data = str;
После очистки строки вам просто нужно запустить JSON.parse()
,
попробуй это:
str = data;
JSON.parse(str.replace('?','').replace('(','').replace(')','').replace(';','').replace(',}','}').replace(',};','}'))
$scope.data = JSON.parse(str);
Версия REGEX:
JSON.parse(data.replace(/\?|\(|\)/g, '').replace(/,}/g, '}').replace(/;/g, ''));
Рабочая копия:
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular-sanitize.js"></script>
<meta charset=utf-8 />
<title></title>
</head>
<body ng-controller="MyController">
<option ng-repeat="cars in data.car" value="{{cars.name}}">{{cars.name}}</option>
<button ng-click="calculateQuantity()">Calculate</button>
<script>
var app = angular.module('app', ['ngSanitize']);
app.controller("MyController", function($scope, $http) {
$scope.calculateQuantity = function() {
$http.get('https://crossorigin.me/http://wsvuci.int-ware.com/appWS.asmx/myService?callback=?', {
params: {
userName: 'aa',
procedureName: "EXECUTE wsReturn"
}
})
.success(function(data) {
$scope.data = JSON.parse(data.replace(/\?|\(|\)/g, '').replace(/,}/g, '}').replace(/;/g, ''));
})
.error(function() {
alert("error");
});
};
});
</script>
</body>
</html>
Это формат JSONP! Вам не нужно ничего чистить. Просто определите действительное имя обратного вызова и используйте $http.jsonp()
. В документации вы найдете также рабочий образец.
replace() возвращает строку. Он не сохраняет результат в переменной "str". Попробуй это:
str = data;
str = str.replace("?", "").replace("(", "").replace(")", "").replace(";", "");
$scope.data = str;