为什么这个对象未定义?

时间:2011-11-04 12:16:13

标签: javascript jquery

执行此代码时,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两次,抱歉。但即使我不那样做,我也有同样的祸害。

1 个答案:

答案 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);
 };