使用jQuery循环遍历mySQL json_encode

时间:2014-12-23 22:51:27

标签: php jquery mysql

我很难通过JQuery从PHP json_encode中检索和显示结果。任何帮助赞赏。这是我的代码php方面:

$return_it = array();
$query= mysql_query("SELECT * FROM $tableName");        
while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
$row_array[] = $row;
array_push($return_it,$row_array);
}
echo json_encode($return_it);

成功之后,我有了这个。

dataType: 'json',  
success: function(data)         
 {
    $.each(data, function() {
    var name = data.name;           
    var values = data.values;           
       $('#output').append("<tr style=\"background-color:#ccc\"><td>id: </td><td> name: </td></tr><tr><td>"+name+"</td><td>"+values+"</td></tr>"); 
    }); 
}

这是循环但是返回undefined,我知道我可能遗漏了一些明显的东西: - /

2 个答案:

答案 0 :(得分:0)

我认为应该是:

dataType: 'json',  
success: function(data)         
 {
    $.each(data, function(d) {
    var name = d[0].name;           
   var values = d[0].values;           
     $('#output').append("<tr style=\"background-color:#ccc\"><td>id: </td><td> name:   </td></tr><tr><td>"+name+"</td><td>"+values+"</td></tr>"); 
}); 
}

each方法将方法应用于传递给方法的每个元素。碰巧的是,您没有向function()传递任何内容,因此您应该添加参数(在我的示例中为d)并操纵d,而不是data

显然你正在嵌套json数组(重新定义单个数组的数组),d[0]部分将返回嵌套数组的第一个元素的属性,在你的情况下,它将是你的{{1 }}。

但是,如果你删除了另一个答案中提到的嵌套JSON数组,那么你不需要添加{name:"...",values:"..."},只使用d[0].name,因为现在你的JSON数组的每一行都是属性的集合,而不是具有属性的大小为1的数组。

基本上你是在封装你的结果。您应该删除封装,或者从JSON调整数据解析。

希望这有帮助。

答案 1 :(得分:0)

您的数组嵌套在php中是不必要的,并且与您尝试解析结果的方式不匹配。只需为每行使用return_it数组

$return_it = array();
$query= mysql_query("SELECT * FROM $tableName");        
while ($row = mysql_fetch_array($query, MYSQL_ASSOC)) {
    $return_it[] = $row;
    //array_push($return_it,$row_array); /* remove */
}
echo json_encode($return_it);

javascript中的结果目前看起来像

[ 
   [ {name:'foo',values:'123'} ],
   [ {name:'foo2',values:'345'} ]
]

没有额外的嵌套:

[ 
    {name:'foo',values:'123'},
    {name:'foo2',values:'345'}
]

这不会改变$.each解析,相反,如果维护当前结构,则需要查看每个子数组。 然而,你是$.each回调

的错误批判论点
$.each(data, function() {index, row){
    var name = row.name;
 });