执行此代码时,Firebug显示错误:
$.ajax({
type: "GET",
url: "../foos/.....",
dataType: "json",
success: function (foos, textStatus, XMLHttpRequest) {
for (var i = 0; i <= foos.length; i++) {
var foo = foos[i];
alert(foo.id);
};
}});
json返回带有id和name属性的var“foos”。 甚至警告foo.id属性,firebug显示错误:
alert(foo.id) //foo is undefined
为什么foo在警报中正确显示时未定义?
编辑: 我给了foo两次,抱歉。但即使我不那样做,我也有同样的祸害。
答案 0 :(得分:5)
你想要哪个foo?数组中的foo(foos)或你在循环中重新声明的foo:
for (var i = 0; i <= foos.length; i++) {
var foo = {
id: "",
name:""
};
var foo = foos[i];
alert(foo.id);
};
但是,至关重要的是,这不是问题所在。问题是您从0
循环到foos.length
:
for (var i = 0; i <= foos.length; i++)
这意味着在循环的最后一次迭代中,索引i
比数组的最大索引大1。当你试图读取这个元素时,确实是未定义的。
您应该将循环更改为:
for (var i = 0; i < foos.length; i++)
(当然摆脱重新定义的foo
)。
结果应该是:
for (var i = 0; i < foos.length; i++) {
var foo = foos[i];
alert(foo.id);
};