我目前正在使用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执行此操作时,它仍然无效。
我做错了什么?
答案 0 :(得分:1)
这可能是一个同步问题,需要您的代码无法获得的响应。
请尝试使用异步调用:
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);
为了更好地理解所有这些,请对范围,关闭,回调和异步