2013-12-19 47 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 
    }); 
});