我试图在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循环我将如何实现它?我不确定我做错了什么,所以如果有人能指引我朝着正确的方向前进,我会很感激。
答案 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)
问题是每个循环中数据的[]括号。通过对初始问题的评论中的尖锐解决方案。