2011-11-04 93 views
0

螢火蟲是否顯示錯誤時,我執行此代碼:這個對象爲什麼不確定?

$.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的返回VAR「FOOS」有ID和名稱的屬性。 甚至提醒foo.id propertie,螢火顯示了錯誤:

alert(foo.id) //foo is undefined 

爲什麼富不確定的,當它在警報正確顯示?

編輯: 我分配了兩次,對不起。但即使我不這樣做,我也有相同的螢火蟲錯誤。

+5

你能告訴我們什麼會通過HTTP的請求被退回的例子嗎? – Connell

+0

我不明白你的代碼在做什麼。你爲什麼在你的循環中聲明'foo'並且什麼都不做?你也使用'i'出其循環上下文... –

+0

你不應該定義foo兩次...... var foo = {}和var foo = foos [i] –

回答

5

你想要哪個foo?內環路從陣列(FOOS)或您的FOO foo的重新聲明:

for (var i = 0; i <= foos.length; i++) { 
    var foo = { 
     id: "", 
     name:"" 
    }; 

    var foo = foos[i]; 
    alert(foo.id); 
}; 

但關鍵的是,這是沒有問題的。問題是,你從循環到0foos.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); 
}; 
+0

是的,夥計。你是對的! TKS! – Thiago