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

나는 loadXmlDoc()가 XML을 반환하기 전에 printSubClassOf()이 완료 생각합니다. 어떻게 생각해? 그리고이 문제를 해결하는 방법? 참고 : 나는 이것을 localhost에서 돌렸다.

+0

@bfavaretto 방금 내 질문을 편집했습니다. 해명 해 주셔서 감사합니다. – shankshera

+0

게시 한 코드를 시도해 보았습니다. 정확히 똑같은 코드를 시도 하시겠습니까? 아니면 다른 것입니까? – bfavaretto

답변

1

귀하의 xml은 유효하지 않습니다. 유효한 xml이되기 위해서는 단일 루트 노드가 필요합니다. responseXML은 응답이 유효한 xml 인 경우에만 채워집니다.

+0

방금 ​​제 질문을 편집했습니다. 해명 해 주셔서 감사합니다. – shankshera

+1

@shankshera는 text/xml로 설정된 파일의 콘텐츠 유형입니다. – Musa

+0

나는 당신이 옳다고 믿습니다. 콘텐츠 유형이어야합니다. 나는 xml 파일을 사용하여 OP 코드를 시도했고, 아파치는 XML 컨텐트 유형을 가지고 서비스를 제공했다. 파일 이름을 .owl로 변경했으며 OP와 동일한 오류가 발생했습니다. – bfavaretto

관련 문제