首先尝试使用JSON。我有一个返回JSON对象的ajax / php函数。回到js方面,我可以看到对象并将其输出到div。看起来很好。我可以把它打印到控制台,看起来还不错。但是当我尝试迭代它并公开各个值时,我只是在我的控制台中得到“未定义”。我无法弄清楚我错过了什么。对不起它,如果是明显的东西,但我没有看到它。谢谢!
var jsonObj = JSON.parse(xmlhttp.responseText);
console.log(jsonObj); //<--looks perfect
console.log(jsonObj.length);
document.getElementById("rightsidebox").innerHTML=response; //<--looks good
for (var group in jsonObj) {
//each of these generates 'undefined' WHY???
//I get 4 'undefined' outputs for each group, so I know that my loop is iterating correctly
console.log(group.id);
console.log(group.day);
console.log(group.time);
console.log(group.name);
}
编辑:这是我的ajax调用返回的一个JSON对象的示例。在这个例子中,我在数组中只有一个对象。当然,通常会有多个对象:
[{“id”:“7”,“day”:“Thursday”,“time”:“7:00 am。”,“name”:“Sub 10:00”}]
编辑2:鉴于这个数组,我不得不问JSON的意义是什么。我可以返回这个数组而不用PHP以JSON格式编码它。所以,如果所有回来的只是一个javascript数组,那么我完成了什么?为什么不跳过PHP中的JSON编码然后迭代数组呢?显然这是有原因的,所以我显然错过了一些东西。有没有更好的方法来做我想要完成的事情?谢谢!
答案 0 :(得分:6)
请考虑以下事项:
var myJson = '{"groupA": {"id": 123, "name": "foo"}}';
var myObj = JSON.parse(myJson);
for (var i in myObj) {
console.log(i);
console.log(i.id);
console.log(myObj[i].id);
}
此处的预期输出是:
myGroup
undefined
123
这是因为你循环只是将对象的“键”分配给值i
。如果你要迭代一个数组而不是一个对象,你将得到 indices 而不是字符串。
在您给出的示例JSON中,您有一个数组,其中包含一个对象。如果你打算在你的数组中有多个对象,那么这样的事情会更好:
for (var group in jsonObj) {
var thisGroup = jsonObj[group];
thisGroup.id; // Etc etc..
}
答案 1 :(得分:0)
如果你有正确的jsonObj,并且你说你做了,你可以使用格式化以易于阅读的形式输出对象。你不必遍历它。
console.log(JSON.stringify(jsonObj, null, 1));
答案 2 :(得分:-2)
当我原来的for (var group in jsonObj)
循环没有,但不管......
for (var i=0; i < jsonObj.length; i++) {
console.log(jsonObj[i].id);
console.log(jsonObj[i].day);
console.log(jsonObj[i].time);
console.log(jsonObj[i].name);
}