JS / JQ:薛定谔阵列?数组如何为空而不是同时为空?

时间:2015-12-30 14:33:34

标签: javascript jquery arrays firefox

我有一个返回对象数组的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);
            });

1 个答案:

答案 0 :(得分:2)

功能是异步的。使用同步版本或使用回调

 $.ajax({..... other properties .... ,
        async: false })