我使用jquery和ajax来检索在php中制作的动态数组,如下所示:
$json = array();
while ($row = $stmt->fetch_assoc()) {
$json['item_'.$row['id']] = $row['name'];
}
header('Content-type: application/json; charset=utf-8');
echo json_encode($json);
exit;
如果我在浏览器中测试php文件,则输出:
{"item_3":"Simon","item_1":"Miriam","item_2":"Shareen"}
到目前为止一切顺利。但是如何在jquery中使用该数组?
我有这个jquery ajax:
$.getJSON( "json.php", function(data) {
console.log(data);
});
在浏览器中测试该页面时,它将其置于控制台中:
Object {item_3: "Simon", item_1: "Miriam", item_2: "Shareen"}
那没关系好吗?或者item_x也应该用引号?
现在,如何在jquery中使用该数组?
如果我尝试console.log(data [0]),它会把未定义
答案 0 :(得分:1)
尝试使用$.each()
来遍历该对象,
$.each(data,function(key,val){
console.log(key,val);
});
如果您想在不重复的情况下访问它,只需使用bracket notation
data['item_3'] //Simon
或直接访问它,
data.item_3 //Simon
然后根据您的意愿将其转换为数组,
var obj = {"item_3":"Simon","item_1":"Miriam","item_2":"Shareen"};
var convertedArray = $.map(obj,function(val,key){
var obj = {}; obj[val] = key;
return obj;
});
答案 1 :(得分:1)
正如我在评论中提到的,php关联数组成为javascript对象,无法以数字形式访问。
解决方案是发送一组对象:
while ($row = $stmt->fetch_assoc()) {
$json[]= ['key'=>'item_'.$row['id'] , 'value' => $row['name']];
}
in js:
data[0].key;
data[0].value;
编辑显然关键是这个例子中的误导性名称,最好将其称为其他内容:
$json[]= ['id'=>'item_'.$row['id'] , 'value' => $row['name']];
//js
data[0].id;