2013-03-13 147 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()代码应该开始工作,因为你正在发送一个多维数组/对象。