2013-12-19 46 views
2

我想通過AJAX調用成功的數據迭代。這些數據,在控制檯登錄後看起來是這樣的:迭代通過jQuery的對象數組

[Object, Object] 
0: Object 
    messages: Array[0] 
    sid: 534 
__proto__: Object 
1: Object 
    messages: Array[0] 
    sid: 535 

我使用的JavaScript是這樣的:

function startMsgCheck() { 
    msgCheck = setInterval(function() { 
    $.ajax({ 
     url: '/sepanel/chat/check_for_msg', 
     type:'POST', 
     dataType: "json", 
     success: function(data) { 
     console.log(data); 
     $.each([data], function(i, val){ 
      var SID = data[i].sid 
      if (data[i].messages.message_id == $('#chat_message_ID_' + SID).val()) { 
      return false; 
      } 
      else { 
      var buildMsg = '<p><b>' + data[i].messages.name + '</b>(' + data[i].messages.time_stamp + ')<b>:</b> ' + data[i].messages.message + '</p>' 

      $('#chat_messageID_' + SID).val(data[i].messages.message_id).text(); 

       $(buildMsg).appendTo("#tab-" + SID); 

      $("#tab-" + SID).prop({ scrollTop: $("#tab-" + SID).prop("scrollHeight") }); 
      if (data.name == data[i].messages.agent_name){ 
       return false; 
      } 
      else { 
      $('#li_' + SID).removeClass('active'); 
      $('#li_' + SID).removeClass('inactive'); 
      $('#li_' + SID).addClass('notify'); 
      } 
      } 
     }); 
     } 
    }); 
    }, 1000); 
    } 

我遇到的問題是,這只是正常工作在第一對象陣列。我可以訪問[0]對象的值,但不能通過[1](或[2],[3]等 - 當這些對象存在時)。

我可能會對這是一個數組感到困惑,數據是否真的回到了對象的對象?我應該使用$。每個都應該這是一個for循環?如果它應該是for循環我將如何實現?我不確定我做錯了什麼,所以如果任何人都可以引導我走向正確的方向,我將不勝感激。

+0

你的代碼塊有點搞砸了,它不包括最後一行。 – DrCord

+0

您正在從控制檯輸出遍歷此數組:'[data.index]' - 但返回的JSON對象(它看起來是一個包含兩個對象的數組)中沒有「index」屬性。 – Pointy

+0

我會說同Pointy一樣。或者你使用'each(data,'或者像這樣讀'data.index [i]',其中一個應該可以工作 – DontVoteMeDown

回答

0

的問題是[]每個循環中的數據括號。通過對最初的問題的評論尖銳的解決方案。

0

基於控制檯輸出,它看起來像data變量具有這樣的結構:

var data = [ 
    { 
     messages: [...], 
     sid: 1 
    },{ 
     messages: [...], 
     sid: 2 
    } 
]; 

鑑於這種結構,你可以遍歷它是這樣的:

$.each(data, function(i, val) { 
    var sid = val.sid; 

    $.each(val.messages, function(j, message) { 
     // do something with message 
    }); 
});