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