我很难通过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,我知道我可能遗漏了一些明显的东西: - /
答案 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;
});