簡體   English   中英

有人可以解釋我的JavaScript函數中發生了什么嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM