Используя запрос ajax, я получаю следующие данные json:
{
"status" : "success",
"xplist" : [
{ "rank" : "1", "username" : "test1", "xp" : "2500" },
{ "rank" : "2", "username" : "test2", "xp" : "2200" },
{ "rank" : "3", "username" : "test3", "xp" : "1900" }
]
}
В моем контроллере я создал пустую переменную данных
$scope.data = {};
И присвойте ему данные json следующим образом:
$scope.data.xpresult = data;
Затем, на мой взгляд, я пытаюсь использовать ng-repeat, чтобы получить элементы:
<li ng-repeat="xp in data.xpresult.xplist">
<div class="listItem">
<div class="left">
<p>{{xp.rank}}</p>
</div>
<div class="middle">
<p style="padding: 8px 46px 0px 0px;margin:0">{{xp.username}}</p>
<p style="margin:0px">{{xp.xp}}</p>
</div>
</div>
</li>
Я также попробовал повторить следующее:
data.xpresult.0.xplist
Также попытался поместить данные в переменную и снова привести результат:
var xpdata = JSON.parse(data);
$scope.data.xpresult = JSON.stringify(xpdata.xplist);
Но, к сожалению, это тоже не сработало.
Может ли кто-нибудь дать мне указатель на то, как правильно это сделать или что я делаю неправильно?
Обновить
Контроллер выглядит следующим образом:
angular.module('AndriodApp')
.controller('ExperienceController', function($scope,md5){
$scope.data = {};
$scope.getTop50 = function(uid,uname) {
var token = md5.createHash("test"+uid+uname+"test");
var postdata = { messagetype: "getexperience", userid: uid, securitytoken: token };
$.post("http://127.0.0.1/backend/jiomsg.php",postdata)
.done(function( data ) {
alert( "Data Loaded: " + data );
$scope.data.xpresult = data;
});
}
$scope.getTop50("1","Gerard");
});
Вы отправляете запрос и получаете ответ за спиной AngularJS, который не знает, что вы изменили область действия, и поэтому выражения на странице должны быть переоценены.
Используйте службу $ http, и все будет хорошо:
$http.post("http://127.0.0.1/backend/jiomsg.php", postdata)
.success(function(data) {
alert( "Data Loaded: " + data );
$scope.data.xpresult = data;
});
Или, если использование jquery действительно необходимо по любой причине, убедитесь, что угловые знают о полученном ответе:
$.post("http://127.0.0.1/backend/jiomsg.php",postdata)
.done(function( data ) {
alert( "Data Loaded: " + data );
$scope.data.xpresult = data;
$scope.$apply();
});