2015-06-27 183 views
0

使用Ajax請求我收到以下JSON數據:angularjs 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-重複獲得的物品出來:

<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"); 
}); 
+1

可能是data.xpresult.data.xplist。如果「數據」來自承諾。 – YOU

+0

您的$ http請求在哪裏定義? 您可以向我們展示與$ scope.data.xpresult = data; HTML模板&$範圍分配到相同的Ctrl?你的html似乎很好(大碼) – aorfevre

+0

用控制器更新了我的帖子。 –

回答

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

使用調試器並檢查數據的值。它是anobject還是它是一個字符串?如果它是一個字符串,你必須用angular.fromJson()解析它。 –

+0

非常感謝,這個伎倆。這確實是一個需要轉換爲json的字符串。 –