Javascript JS/JQ:Schrodinger';s阵列?数组如何同时为空和不为空?
我有一个javascript函数,它返回一个对象数组。该数组如下所示: 我想使用$.each()遍历数组,并使用对象的属性执行一些操作。但是,$.each()根本不会启动。例如,这:Javascript JS/JQ:Schrodinger';s阵列?数组如何同时为空和不为空?,javascript,jquery,arrays,firefox,Javascript,Jquery,Arrays,Firefox,我有一个javascript函数,它返回一个对象数组。该数组如下所示: 我想使用$.each()遍历数组,并使用对象的属性执行一些操作。但是,$.each()根本不会启动。例如,这: myArray = myFunc(); $.each(myArray, function(index, object){ console.log('testing testing 1 2 3'); } 什么都不做。没有控制台日志 但是,如果我这样做: myArray = myFunc(); console
myArray = myFunc();
$.each(myArray, function(index, object){
console.log('testing testing 1 2 3');
}
什么都不做。没有控制台日志
但是,如果我这样做:
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);
});
函数是异步的。使用同步版本或使用回调
$.ajax({..... other properties .... ,
async: false })
$.ajax()
操作是异步的。函数调用在HTTP操作完成之前返回。天啊,这当然解释了很多。所以我应该在第二个ajax操作中将what-I-want-to-do-with-the-array代码移动到一个.done()函数中?第二次,每个调用似乎都缺少一些环节,@Pointy,这就完全解决了问题。你是对的,我完全没有得到整个异步部分。谢谢