我正在尝试从xml加载我的数据。这是我的代码
function myFunction(){
debugger;
var url = "js/MyXml.xml";
var httpRequest = new XMLHttpRequest();
httpRequest.open('GET', url, true);
httpRequest.send();
var xmlDoc=httpRequest.responseXML;
}
在httpRequest中,我的状态代码为httpRequest.responseXML = null
驾驶你请帮我解决我的错误。
答案 0 :(得分:3)
在您的情况下,您使用了XMLHttpRequest调用,即异步。此外,您尝试在实际答案到达之前将返回值分配给变量,无论是从服务器读取文件还是实际响应。
在任何情况下,如果您决定使用Async(这是首选方式),请遵守下面提供的代码。 另外,我建议您自己进行更多调查,请参阅下面提供的链接。
var url = "js/MyXml.xml";
var xhttp = new XMLHttpRequest();
var xmlDoc = null;
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
xmlDoc = httpRequest.responseXML;
}
};
xhttp.open("GET", url, true);
xhttp.send();
除此之外,您还可以使用fetch,这也应该在您的javascript环境中可用。根据MDN,这仍然是实验技术,但它将提供有益的知识。
最后,对于手头的任务,您可以使用一个库,旨在使此任务比原生XMLHttpRequest更容易。其中一个是jQuery。它可能更容易使用。
您可以找到更多信息here。也很容易关注SO question。
答案 1 :(得分:1)
将其更改为:
httpRequest.open('GET', url, false);
使用true参数,您可以将请求设置为异步。
这意味着您在请求完成执行之前阅读了响应。
将最后一个参数设置为false会将请求设置为同步,因此它将阻止您的网页,直到请求完成。
正确的做法是在异步请求完成时创建一个事件。
以下是一个例子:
function myFunction() {
debugger;
var url = "js/MyXml.xml";
var httpRequest = new XMLHttpRequest();
httpRequest.open('GET', url, true);
httpRequest.onload = function(oEvent) {
var xmlDoc = httpRequest.responseXML;
//Continue code here
}
httpRequest.send();
}