所以我发现了一些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调用的函数。我只是想缩短它。
有人可以解释这里发生的事情吗?
答案 0 :(得分:1)
Ajax是异步的。
你的循环触发了Ajax请求。
您传递给getJSON
的功能是事件处理程序,在收到HTTP响应时运行 。
在重复调用getJSON
的循环完成之前,没有收到任何响应,此时该值是最后一个。
有关解决方法,请参阅How to generate event handlers with loop in Javascript?。