Проблемы с отображением данных JSON с помощью Angular Js ng-repeat
Я могу получить следующие данные JSON (тестовые данные) из файла php:
JSON:
[{"id":"1","name":"shabri","desc":"bbkbjkbjbjnnklnln","location":"location","mobile":"498534534","telephone":"4549385","offer":"20","email":"nfnkjrnfnrndnrgnkjr"},{"id":"2","name":"bhagatfergdfgfdg","desc":"vfdgfdbgbbgbg","location":"fbgbgfbgfb","mobile":"544656757","telephone":"4223424","offer":"30","email":"vdsxdvgvgv"},{"id":"3","name":"rddfdgdf","desc":"bdffgd","location":"fghgfhfhgf","mobile":"8598","telephone":"856845","offer":"6","email":"httrdh6kiki"}]
Угловой контроллер Js
.controller('RestaurantsCtrl', ['$scope', '$http', function ($scope, $http) {
$http.get('http://xyz/getRestros.php')
.success(function(data) {
alert(data);
$scope.Restaurants = data;
});
}])
Я уверен, что данные JSON извлекаются, потому что для тестирования у меня есть предупреждение (данные), которое отображает правильные данные в кодировке JSON в окне предупреждения.
Проблема в том, что данные не получают привязку к $scope.Restaurants. поэтому ng-repeat в html не заполняет список.
ng-repeat заполняет список, если я жестко запишу $scope.Restaurants.
в чем здесь ошибка? пожалуйста помоги..
РЕДАКТИРОВАТЬ:
жестко закодированные $ scope. Рестораны, которые работают:
$scope.Restaurants = [
{ name: 'Shabri', id: 1 },
{ name: 'Bhagat Tarachand', id: 2 },
{ name: 'Udipi', id: 3 },
{ name: 'Shahu', id: 4 },
{ name: 'Bagdadi', id: 5 },
{ name: 'Shiv Sagar', id: 6 }
];
нг-повторить:
<a class="item item-thumbnail-left" ng-repeat="Restaurant in Restaurants | filter: searchText" href="#/app/Restaurants/{{Restaurant.id}}">
<img src="img/default_restro.png" style="margin-top:30px;"/>
<h2 style="font-weight:bold;">{{Restaurant.id}}</h2>
<p>{{Restaurant.name}}</p><br>
<span style="white-space: pre-wrap; font-weight:300;">This is the description about the restaurant click to know more.</span><br>
</a>
3 ответа
Вам нужно проанализировать возвращенную строку JSON в объект.
Пытаться
arrayData = JSON.parse(data);
$scope.Restaurants = arrayData;
Вы можете выполнить отладку в представлении Chrome Developer Tools (Ctrl-Shift-I) и установить точку останова, чтобы увидеть, имеет ли значение $scope.Restaurant после строки $scope.Restaurants = data;
Это на самом деле не ответ, но я нашел причину проблемы выше и может случиться с кем-то.
Виновником был бесплатный веб-хостинг, который я использовал для размещения этого php-файла.
Каждый раз, когда выполняется php, веб-хостинг добавляет какой-то скрипт Google Analytics в конце после завершения объекта. Этот скрипт не появляется при редактировании этого файла в реальном времени. я не знаю как
Во всяком случае, я нашел это, когда я снова отладил $ scope.Restaurants.
Кажется, что если что-то еще будет отражено с объектом JSON, то он будет сериализован и будет считаться строкой.
После исправления и изменения хоста была обнаружена разница, которая рассматривалась как фактические объекты json, и она работала нормально.