为什么XMLHttpRequest返回null?

时间:2013-04-01 21:22:53

标签: javascript xml xml-parsing xmlhttprequest

这有点奇怪。我在不同的计算机上运行此脚本,得到了不同的结果。 在一台计算机上,此代码有效,但在另一台计算机上无效。这是我的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上运行了这个。

1 个答案:

答案 0 :(得分:2)

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