2013-03-13 255 views
1

首先,我要指出的問題,基本上我$.each(data, function (i, v) {代碼中它傳回了一堆被從PHP代碼變量回顯這是使用json_encode而是試圖把這些當變量甚至alert()他們它的顯示undefined我已經嘗試過很多辦法實際顯示的數據,但它總是返回undefined,我不知道爲什麼,因爲我的代碼似乎有效的我的觀點。JSON/PHP解析不正確

目前的JavaScript代碼,我有如下

$.ajax({ 
     url: "functions/ajax.php", 
     data: "func=auto", 
     type: "GET", 
     dataType: "json", 
     success: function(data){ 
       $.each(data, function (i, v) { 
          var name = v['name']; 
          var player_id = v['id']; 
          alert(player_id); 
       }); 
     }, 
     error: function (jqXHR, textStatus, errorThrown){ 
      console.log('Error ' + jqXHR); 
     } 
}); 

目前PHP代碼,我有如下

$res = $DB->Query("SELECT * FROM `inventory` WHERE `account_id` = '$_SESSION[ID]'"); 
$data = array(); 
while($player = $DB->fetch_assoc()) { 
     $data['name'] = $player['name']; 
     $data['id'] = $player['player_id']; 
} 
header('Content-type: application/json'); 
echo json_encode($data); 

只是總結了整個事情了,使用時alert()player_id返回undefined其中很顯然,我希望它返回正確的值

+2

只有一個在那裏的球員,所以不要'。每()'在它。或者運行'$ data [] = array('name'=> $ player ['name'],'id'=> $ player ['player_id']);' – Wrikken 2013-03-13 21:47:44

+0

這樣工作是因爲我的'while($ player = $ DB-> fetch_assoc()){'返回多個結果? – 2013-03-13 21:50:22

+1

看什麼'$ data'是在當前的腳本。它只會是列表中的最後一名玩家,除非您將記錄追加到'$ data'而不是_overwriting_。 – Wrikken 2013-03-13 21:53:10

回答

6

你不回送一個多層次的數組,你發送一個數組只有兩個元素。例如你的JS代碼應該是

success: function(data){ 
       var name = data['name']; 
       var player_id = data['id']; 
      } 

如果DB查詢IS應該發回的多條記錄,那麼你正在構建一個錯誤:

while($player = $DB->fetch_assoc()) { 
    $data[] = array('name' => $player['name'], 'id' => $player['player_id']); 
} 
echo json_encode($data); 

,然後你$.each()代碼應該開始工作,因爲你正在發送一個多維數組/對象。