2013-04-01 56 views
0

这有点奇怪。我在不同的电脑上运行这个脚本,得到了不同的结果。 在一台计算机中,此代码可以正常工作,但在另一台计算机中无效。这是我的js代码:为什么XMLHttpRequest返回null?

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之前。你怎么看?以及如何解决这个问题?仅供参考:我在本地主机上运行这个。

+0

@bfavaretto我刚刚编辑了我的问题,谢谢你的澄清。 – shankshera

+0

我试过了你发布的代码,它工作。你正在尝试完全相同的代码,还是不同的东西? – bfavaretto

回答

1

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

+0

我刚刚编辑了我的问题,谢谢你的澄清。 – shankshera

+1

@shankshera是文件的内容类型设置为text/xml – Musa

+0

我相信你是对的,它必须是内容类型。我使用.xml文件尝试了OP代码,Apache使用了xml内容类型,并且它工作正常。将该文件重命名为.owl,并得到与OP完全相同的错误。 – bfavaretto