2009-09-13 33 views
0

我很可能缺少json和javascript的東西。僅包含一個項目的JSON結果

[{"commentText":"Testing 123","userPosted":"maxfridbe"}, 
{"commentText":"Testing 23","userPosted":"maxfridbe"}] 

有時我與此代碼的工作多次響應:

function(data) 
     { 
      var sel = this; 

      jQuery.each(data, 
       function() 
       { 
        sel.append("<li>"+ this.userPosted+ "-" + this.commentText + "</li>"); 
       });   
     }; 

有時候我只得到它打破了上面的代碼一個響應:

[{"commentText":"another test again welcom","userPosted":"maxfridbe"}] 

我知道這是因爲迴應的處理方式與列表不同。

尋找答案,我得到了一個週轉。任何解決方案將不勝感激。

回答

0

與CMS解決方案圍繞演奏使我意識到,數據只是一個字符串,不知何故如此:

if (!jQuery.isArray(data)) data = eval(data); 

工作,因爲這樣的數據是一個對象。不知道爲什麼當有多個結果它爲你做評估。

+0

如果你的數據只是一個字符串,你應該在你的ajax請求中使用dataType:'json'選項,或者使用getJSON函數 – CMS 2009-09-13 19:11:39

7

在您提供的第二個例子中,這似乎是隻有一個項目的數組,如果是這樣,它應該工作,但我認爲你要只喜歡一個對象:

{"commentText":"another test again welcom","userPosted":"maxfridbe"} 

如果它是單個對象$.each迭代對象屬性。

你可以檢查你的data變量不使用$.isArray數組,如果不是,你可以把它包裝成一個單一的元素陣列,從而預期$.each功能仍將工作:

//.. 
if (!jQuery.isArray(data)) data = [data]; // if isn't an array, wrap it 

jQuery.each(data, function() { 
    sel.append("<li>"+ this.userPosted+ "-" + this.commentText + "</li>"); 
}); 
//.. 
+0

這聽起來是對的。 Maxfriebe應該拔出螢火蟲,仔細查看他的數據。 – timdev 2009-09-13 18:30:39

+0

該數據來自螢火蟲。 – maxfridbe 2009-09-13 18:59:19

+0

真棒回答!我和OP有同樣的問題,這就像一個魅力。如果只有一個對象被呈現以供迭代,我不知道each()會迭代對象的屬性。 – webworm 2014-05-29 15:54:23

1

我想你應該在用戶每次你()函數的一些可選參數:使用此關鍵字

function(data) 
    { 
     var sel = this; 

     jQuery.each(data, 
      function(i, item) 
      { 
       sel.append("<li>"+ item.userPosted+ "-" + item.commentText + "</li>"); 
      });   
    }; 

你的情況造成混亂

希望這有助於

相關問題