2013-12-19 2 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] и т. Д. - когда эти объекты существуют).

Возможно, я смущен тем, что это массив, являются ли данные, возвращающиеся на самом деле объектом объектов? должен ли я использовать $ .each вообще, если это будет цикл 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 
    }); 
}); 
Смежные вопросы