2013-02-02 21 views
0

我試圖從JSON對象中抓取一系列字符串,並將它們連接成一個大字符串。對於我來說,使用一個循環似乎很明顯,在每個迭代循環中添加每個新的字符串。然而,當我真正插入它時,我會遇到一些奇怪的錯誤。使用javascript從JSON動態檢索信息

TypeError: data.posts[i] is undefined 

我通常只認爲它不能被(我是新來的JavaScript,所以我在猜測基礎這在很大程度上)呼籲這樣的,但這裏的奇怪的事情:日誌我打印到螢火蟲包含完全預期的信息。我可以忍受不明原因的錯誤,但它不會在網頁上顯示組合的字符串。

var data = JSON.parse(d); 
var i = 0; 
while(i <= data["posts"].length) { 
    messages += "<b>" + data["posts"][i]['nickname'] 
      + ":</b> - " + data["posts"][i]['content'] + "<br>"; 
    i++; 
    console.log(messages); 
} 
console.log(messages); 
$('.post1').html(messages); 

我在這裏錯過了什麼?

+0

你的JSON的結構是什麼? – YoannM

+0

對於您的問題,某些內容很奇怪,錯誤信息似乎與您發佈的代碼不匹配......發生了什麼錯誤? – Hogan

+0

錯誤發生在while循環的第一行。 JSON是一個包含'error'和'posts'的數組。帖子由數據庫查詢中的行填充: $ data ['posts'] = $ this-> communication_model-> fetch_posts($ username,$ offset); –

回答

2

很難告訴你的問題,如果這是唯一的問題,但它看起來像你有一個問題。如果數組索引0 - N,則長度返回n + 1和你的循環應該是

while(i < data["posts"].length) { 

注意<而不是<=

+0

現在,我覺得自己像一個巨大的白癡。不過,謝謝你的幫助! –

0

我建議使用一個for循環,並確定返回的整個塊數據被定義爲單個集合,例如數據。

,並使用以下方法:

$.ajax(
{ 
    // Post variable1 to url. 
    type : 'post', 
    url : 'urlToBackend, 
    dataType : 'json', 
    data : 
    { 
     'variable1' : 'theValue' 
    }, 
    success : function(data) 
    { 
     var message; 
     var reply1; 
     var reply2; 

     for(var i = 0; i < data.length; i++) 
     { 
      reply1 = data[i].reply1FromBackend; // Assuming that reply1FromBackend was returned. 
      reply2 = data[i].reply2FromBackend; // Assuming that reply2FromBackend was returned. 

      message += reply1; 
      message += reply2; 
     } 
     // do something 
    }, 
    complete : function(data) 
    { 
     // do something 
    } 
}); 

所以你必須要確保該網址有效,且後端可以做一些與變量1,且後端回聲reply1FromBackend和replyFromBackend,這樣:

// Receive the posted variable's value if it is set. 
$variable1= isset($_POST['variable1']) ? $_POST['variable1'] : false; 

// ... do something 

$json[] = array 
(
    'reply1FromBackend' => 'yo', 
    'reply2FromBackend' => 'sup' 
); 
echo json_encode($json); 
flush(); 

有沒有幫助?