有人可以解释我的JavaScript函数中发生的事情吗?

时间:2014-08-10 18:39:13

标签: javascript php ajax

所以我发现了一些ajax电话。第一个getJson返回一个json对象,我命名为" tables"其结构为表['表']列出了数据库中表的名称。 key1表示每个表名。所以我专门遍历每个表格。我正在测试这些东西,所以当表名特别是"接口" (请参阅if语句)然后我想执行另一个ajax请求以从该表本身检索数据。

它很奇怪,因为如果key1 ==" Intefaces",console.log(key1)会吐出来,但是,我的第二个console.log(key1)不会在接口上吐出。它吐出" vlan"这是我数据库中的最后一个表。

尽管我的items数组填充了来自接口的正确数据。

我不明白为什么一旦我进入第二个getJson语句,key1的val就会改变,特别是当key1不等于"接口"。

时,该函数甚至无法访问
$.getJSON( "/ryan/nonEmber/getTables.php", function( data ) {
        tables = data;    
        for (var key1 in tables['tables']) {
              if (tables['tables'].hasOwnProperty(key1)) {
                console.log(key1 + " -> " + tables['tables'][key1]);
                if(key1 == 'Interfaces'){
                    console.log(key1);
                    $.getJSON("/ryan/nonEmber/getJson.php?table=" + key1, function( data2 ){
                        var items = [];
                        $.each(data2.post, function(key, val){
                              items.push(val);
                        });
                        console.log(key1);
                        for(i = 0; i < items.length; i++){
                            var myString = '<tr id = "visibleRow">';
                            for(j = 0; j < tables['tables'][key1].length; j++){
                                myString = myString + '<td id = "visibleDef">' + items[i][tables['tables'][key1][j]] +'</td>';
                                }
                            myString = myString + '</tr>';
                            Interfaces.push(myString);
                        }
                    }); 
                }
              }
        }
});

你可能我的问题在于我的ajax。它可能是,但我已经编写了过去依赖于其他ajax函数的ajax函数,并且它们已经正常工作。事实上,我在这里展示的这个功能正在取代另一个调用了3个ajax调用的函数。我只是想缩短它。

有人可以解释这里发生的事情吗?

1 个答案:

答案 0 :(得分:1)

Ajax是异步的。

你的循环触发了Ajax请求。

您传递给getJSON的功能是事件处理程序,在收到HTTP响应时运行

在重复调用getJSON的循环完成之前,没有收到任何响应,此时该值是最后一个。

有关解决方法,请参阅How to generate event handlers with loop in Javascript?