2013-04-01 63 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