繁体   English   中英

无法从纯JavaScript中的XML加载数据

[英]Not able to load data from xml in plain javascript

我正在尝试从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

出租车,请帮助我,我做错了。

在您的情况下,您使用了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();

此外,您还可以抓取 ,它也应该在您的javascript环境中可用。 据MDN称,这仍是实验技术,但它将提供有益的知识。

最后,对于手头的任务,您可以使用一个库,该库旨在使该任务比本机XMLHttpRequest更容易。 其中之一是jQuery 使用它可能会更容易。

您可以在此处找到更多信息。 也很容易遵循SO问题

更改为:

 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();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM