Angularjs JSON разбор проблемы

0

Используя запрос 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");
});
Теги:
view

1 ответ

2

Вы отправляете запрос и получаете ответ за спиной 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();
});
  • 0
    Я использовал jquery, потому что $ http.post не возвращал никаких данных. Я тоже попробовал ваш фрагмент, но он возвращается пустым. Я добавил $ scope. $ Apply (); но он все равно не будет отображаться. Я что-то упустил?
  • 1
    Используйте отладчик и проверьте ценность данных. Это объект или строка? Если это строка, вам придется проанализировать ее с помощью angular.fromJson ().
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню