使用jquery迭代对象数组

时间:2013-12-19 17:02:04

标签: javascript jquery arrays object each

我试图在AJAX调用中迭代成功数据。登录控制台时的数据如下所示:

[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循环,我应该使用$ .each吗?如果它应该是一个for循环我将如何实现它?我不确定我做错了什么,所以如果有人能指引我朝着正确的方向前进,我会很感激。

2 个答案:

答案 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
    });
});

答案 1 :(得分:0)

问题是每个循环中数据的[]括号。通过对初始问题的评论中的尖锐解决方案。