【问题标题】:Why XMLHttpRequest return null?为什么 XMLHttpRequest 返回 null?
【发布时间】:2013-03-23 00:58:11
【问题描述】:

这有点奇怪。我在不同的计算机上运行了这个脚本,得到了不同的结果。 在一台计算机上,此代码有效,但在另一台计算机上无效。这是我的 js 代码:

xmlDoc = loadXmlDoc();
printSubClassOf();

function loadXmlDoc(){
    var xmlDom = null;
    var xhttp = new XMLHttpRequest();

    xhttp.open("GET", "resto.owl", false);
    xhttp.send(null);
    xmlDom = xhttp.responseXML;
    return xmlDom;
}

function printSubClassOf(){
    a = xmlDoc.getElementsByTagName("SubClassOf");  

    for(i = 0; i < a.length; i++){
        b = xmlDoc.getElementsByTagName("SubClassOf")[i].childNodes;

        for(j = 0; j < b.length; j++){          
            c = xmlDoc.getElementsByTagName("SubClassOf")[i].childNodes[j];

            document.write(i + " " + j + " " + c.nodeName + "<br>");
        }
    }
}

这是我试图解析的 XML。

<Ontology>
    <SubClassOf>
        <Class IRI="#Chef"/>
        <Class IRI="#Employee"/>
    </SubClassOf>
    <SubClassOf>
        <Class IRI="#Customer"/>
        <Class IRI="#People"/>
    </SubClassOf>
</Ontology>

我使用 Chrome 开发者工具来查看发生了什么。有一个带有 200 状态码的 XHR 请求,但仍然出现此错误。

a = xmlDoc.getElementsByTagName("SubClassOf");
Uncaught TypeError: Cannot call method 'getElementsByTagName' of null

我认为 printSubClassOf()loadXmlDoc() 返回 XML 之前完成。你怎么看?以及如何解决这个问题?仅供参考:我在 localhost 上运行了这个。

【问题讨论】:

  • @bfavaretto 我刚刚编辑了我的问题,感谢您的澄清。
  • 我尝试了您发布的代码,并且成功了。您是在尝试完全相同的代码还是不同的代码?

标签: javascript xml xml-parsing xmlhttprequest


【解决方案1】:

您的 xml 无效。需要有一个根节点才能成为有效的 xml。只有当响应是有效的 xml 时才会填充 responseXML。

【讨论】:

  • @shankshera 是文件的内容类型设置为 text/xml
  • 我相信你是对的,一定是内容类型。我使用 .xml 文件尝试了 OP 代码,apache 使用 xml 内容类型为它提供服务,并且它有效。将文件重命名为 .owl,并得到与 OP 完全相同的错误。
  • 谢谢,这对我有帮助...我的 responseText 和 response 变量在请求后填充,但 ResponseXML 为空。编辑 XML 后,我的 requestXML 变量按预期填充。
猜你喜欢
  • 2022-12-26
  • 2016-12-28
  • 2015-11-25
  • 2015-07-04
  • 2019-09-29
  • 2015-02-25
  • 2015-10-21
  • 2021-08-12
  • 2011-03-18
相关资源
最近更新 更多