[英]Can somebody explain whats happening in my JavaScript function?
因此,我發生了一些ajax調用。 第一個getJson返回一個json對象,我將其命名為“ tables”,其結構為table ['tables']列出了數據庫中表的名稱。 key1代表每個表名。 所以我專門遍歷每個表。 我正在測試東西,所以當表名專門為“接口”(請參閱if語句)時,我想執行另一個ajax請求以從該表本身檢索數據。
這很奇怪,因為如果key1 ==“ Intefaces”,console.log(key1)會吐出,但是,我的第二個console.log(key1)不會在接口上吐出。 它吐出“ vlan”,這是數據庫中的最后一個表。
盡管如此,我的items數組還是用接口中的正確數據填充。
我不明白為什么一旦進入第二條getJson語句后,key1的值就會改變,尤其是當key1不等於“ Interfaces”時甚至不應該訪問該函數時。
$.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調用的功能。 我只是想縮短它。
有人可以解釋這里發生了什么嗎?
Ajax是異步的。
您的循環會觸發Ajax請求。
傳遞給getJSON
的函數是一個事件處理程序 ,該事件處理程序 在收到HTTP響應時運行。
在重復調用getJSON
的循環完成之前,直到最后一個值都沒有收到響應。
請參閱如何在Javascript中使用循環生成事件處理程序? 為周圍的工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.