我有一个返回对象数组的javascript函数。该数组如下所示:array
我想使用$ .each()迭代数组并使用对象的属性做一些事情。但是,$ .each()根本不会触发。例如,这个:
myArray = myFunc();
$.each(myArray, function(index, object){
console.log('testing testing 1 2 3');
}
根本不做任何事情。没有console.logs。
但是,如果我这样做:
myArray = myFunc();
console.dir(myArray);
$.each(, function(index, object){
console.log('testing testing 1 2 3');
}
在Firefox中它产生上面显示的输出 - 我可以看到数组中的所有对象都没问题。
但是,console.log()只显示
Array [ ]
数组如何同时为空,并且具有console.dir()可以显示的内容?
FWIW,这个丑陋的混乱是函数(部分由PHP生成)最终看起来像:
instance = false;
function checkMessages() {
var messageArray = [];
$('#newMessages').html('0');
if (!instance) {
instance = true;
myMessages = 0;
myRead = 0;
delete data;
$.ajax({
type : 'POST',
url : 'Chat/process.php',
data : {
'function' : 'getState',
'filename' : 'data/chat_2_1.txt',
},
dataType: 'json',
success: function(data){
myMessages = data.state;
messageArray[2] = {
'filename' : 'chat_2_1.txt',
'divname' : 'msg_2',
'length' : data.state,
};
},
}).done(function(){
delete data;
$.ajax({
type : 'POST',
url : 'Chat/process.php',
data : {
'function' : 'getReadByMe',
'filename' : 'log/chat_2_1_2.txt',
},
dataType: 'json',
success: function(data){
messageArray[2].read = data.read;
},
});
});
myMessages = 0;
myRead = 0;
delete data;
$.ajax({
type : 'POST',
url : 'Chat/process.php',
data : {
'function' : 'getState',
'filename' : 'data/chat_3_1.txt',
},
dataType: 'json',
success: function(data){
myMessages = data.state;
messageArray[3] = {
'filename' : 'chat_3_1.txt',
'divname' : 'msg_3',
'length' : data.state,
};
},
}).done(function(){
delete data;
$.ajax({
type : 'POST',
url : 'Chat/process.php',
data : {
'function' : 'getReadByMe',
'filename' : 'log/chat_3_1_2.txt',
},
dataType: 'json',
success: function(data){
messageArray[3].read = data.read;
},
});
});
instance = false;
return messageArray;
} else {
// setTimeout(checkMessages({}), 500);
}
}
$(document).ready(function(){
console.log('foo');
myMessageArray = checkMessages([]);
console.log(myMessageArray);
$.each(myMessageArray, function(i, obj){
console.log('compare?');
// compareRead(Number(obj['length']), Number(obj['read']), obj['divname']);
});
// setInterval(checkMessages(), 500);
});
答案 0 :(得分:2)
功能是异步的。使用同步版本或使用回调
$.ajax({..... other properties .... ,
async: false })