簡體   English   中英

XMLHttprequest.send(null)正在崩潰我的代碼

[英]XMLHttprequest.send(null) is crashing my code

我目前正在使用JavaScript編寫搜索功能。

然而,當我試圖測試我的創作時,我發現它已經中途停止,沒有明顯的原因。

以下是我的代碼:

document.getElementById("test").innerHTML = "";
var Connect = new XMLHttpRequest();
Connect.open("GET", "xmlTest.xml", false);
document.getElementById("test").innerHTML = "1";
Connect.send(null);
document.getElementById("test").innerHTML = "2";
var docX = Connect.responseXML;
var linjer = docX.getElementsByTagName("linjer");

第一行是清除代碼中較早的潛在錯誤消息。 然后我嘗試打開一個XML文件,因為我需要從中讀取它。

如您所見,我在那里輸入了兩個調試語句; 它們將打印1或2,具體取決於我在代碼中獲得的距離。

使用這個,我發現它完全停在Connect.send(null); 聲明(1被打印,但2從未這樣做),但我無法弄清楚為什么。 Google表示,Chrome可能無法訪問本地文件,但當我找到允許Chrome執行此操作的方法時,它仍然無效。

我究竟做錯了什么?

這可能是一個同步問題,需要您的代碼無法獲得的響應。

請嘗試使用異步調用:

Connect.open("GET", "xmlTest.xml", true);

還要確保設置正確的回調,因為您現在將使用異步而不是同步代碼,如下所示:

// Global variable scope
var docX;
var linjer;

// Define your get function
getDoc = function(url, cbFunc) {

    var Connect = new XMLHttpRequest();

    // Perform actions after request is sent
    // You'll insert your callback here
    Connect.onreadystatechange = function() {
        // 4 means request finished and response is ready
        if ( Connect.readyState == 4 ) {
            // Here is where you do the callback
            cbFunc(Connect.responseXML);
        } 
    }; 

    // 'true' param means async, it is also the default
    Connect.open('GET', url, true);
    Connect.send();
}

// Define your callback function    
callbackFunction = function(responseXML) {
    // XML file can now be stored in the global variable
    window.docX = responseXML;
    window.linjer = window.docX.getElementsByTagName("linjer");
}

// And here is the call you make to do this
getDoc("xmlTest.xml", callbackFunction); 

為了更好地理解所有這些,請對范圍閉包回調異步進行一些研究。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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