2012-12-05 51 views
0

我有一個JSON對象,我使用jQuery的parseJSON函數進行解析。我給你孩子一個對象到一個局部變量,然後我遍歷使用for循環如下:Javascript對象獲取未定義的固定長度的循環

var posts = feedObj["posts"]; 
content+= "<h2 title=\"" + feedDescription + "\"><a href=\"" + feedPermalink + "\">" + feedTitle + "</a></h2>"; 
content+= "<ul class=\"feedList\">"; 
for (var i = 0; i < 10; i++) { 
    console.log(posts[i]["postTitle"]); 
    var postTitle = posts[i]["postTitle"]; 
    if((typeof posts[i] != "undefined") || postTitle != null) { 
      content+= "<li>"; 
      console.log("AJ::PostTitle"+postTitle); 
      content+= "<a href=\"" + decodeURIComponent(posts[i]["permaLink"]) + "\" target=\"_blank\">" + unescapeHTML(postTitle) + "</a>"; 
      content+= "</li>"; 
    } 
} 

出於某種原因,var postTitle = posts[i]["postTitle"];總是提供了以下錯誤: Uncaught TypeError: Cannot read property 'postTitle' of undefined

我有不知道爲什麼會發生這種情況。控制檯語句正確輸出postTitle,但分配始終失敗。我究竟做錯了什麼?

+0

如果添加了一個'的console.log(帖[1])會發生什麼拿到第10個職位,更換;'您現有的前日誌聲明?它看起來像'posts'數組中的一個索引是未定義的,您可能會從日誌語句中獲取錯誤。 – Krease

+0

@Chris,這是問題。在for循環條件檢查中將其更改爲posts.length固定它 –

回答

2

而不是

for (var i = 0; i < 10; i++) { 

添加檢查條件的數組對象

for (var i = 0; i < posts.length ; i++) { 

也許你指的是陣列可能沒有在其10個條目。後面的方法應該可以解決問題。

+0

太棒了。就是這樣。我添加了一些導致此失敗的額外數據源。謝謝:) –

+0

@AJ。 ..很高興已經幫助:) –

-2

使用foreach而不是固定長度for循環。

+0

或只是一個for循環,正確的方法 – Ian

+0

@好,是的,這是涵蓋在你的答案,但語言增加了一個'foreach'的概念,所以你沒有暴露在使用錯誤'for'循環是正確的方式。錯誤地使用更難,所以應該首選。 – djechlin

+0

你在for循環中暴露了哪些錯誤?沒有定義的項目? – Ian

1

如果你想

for (var i = 0; i < 10; i++) { 

for (var i = 0; i < 10 && i < posts.length; i++) { 
+1

此答案也是+1。雖然,我會將限制移到服務器端而不是客戶端,以限制正在傳輸的數據 –

+1

如果帖子數大於10,該怎麼辦?這將失敗... – Ian

+0

@Ian我之所以說「應該按照我測試的方式工作」是有原因的,你錯了 – Robert00001