Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS/JQ:Schrodinger';s阵列?数组如何同时为空和不为空?_Javascript_Jquery_Arrays_Firefox - Fatal编程技术网

Javascript JS/JQ:Schrodinger';s阵列?数组如何同时为空和不为空?

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

我有一个javascript函数,它返回一个对象数组。该数组如下所示:

我想使用$.each()遍历数组,并使用对象的属性执行一些操作。但是,$.each()根本不会启动。例如,这:

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,这就完全解决了问题。你是对的,我完全没有得到整个异步部分。谢谢