2009-02-28 7 views
4

Javascript를 사용하여 XML 파일을로드하려고하는데 IE, Firefox 및 Safari에서 작동하는 좋은 기능을 아직 찾지 못했습니다.TypeError : 값이 정의되지 않았습니다 (표현식 xmlDoc.load의 결과)가 객체가 아닙니다.

http://www.w3schools.com/XML/tryit.asp?filename=tryxml_dom_createelement

정확한 코드는 다음과 같습니다 : 내가 현재 사용하고있는로드 기능은 기본적으로 바로 W3Schools의 자습서 중 하나입니다

if (window.ActiveXObject) 
{ 
xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
} 
// code for Mozilla, Firefox, Opera, etc. 
else if (document.implementation.createDocument) 
{ 
xmlDoc=document.implementation.createDocument("","",null); 
} 
else 
{ 
alert('Your browser cannot handle this script'); 
} 
xmlDoc.async=false; 
xmlDoc.load(dname); 

어디 DNAME = xml 파일의 URL입니다. 이 코드는 "TypeError : 값이 정의되지 않았습니다 (표현식 xmlDoc.load의 결과)가 객체가 아닙니다." Safari에서.

나는이 사이트에 코드를 시도 :

http://developer.apple.com/internet/webcontent/xmlhttpreq.html

그러나,이 널 (null) XML 파일을 얻을 수 있습니다. 누구든지 도와 줄 수 있습니까?

답변

0

XML for <Script>을 볼 수 있습니다. Safari에서 문제를 해결했음을 알리는 게시물을 보았습니다. 문제는 사파리가 가져 하는 방법 및 부하 XML 소스로 document.implementation.createDocument를 지원하지 않습니다처럼

+0

빠른 답장을 보내 주셔서 감사합니다. 그 라이브러리는 내가 필요로하는 브라우저에서 작동합니다. 하지만 그 라이브러리를 사용하려면 모든 코드를 다시 작성해야합니다. 이상적으로는 Safari에서 작동하도록로드 xml 함수를 업데이트하고 싶지만 load xml 함수가 있으면 라이브러리에서도 가져올 수 있습니다. –

+0

나는 똑같은 문제가있다. 제 3 자 라이브러리를 사용하는 것 외에 다른 아이디어가 있습니까? –

1

는 소리. XML AFttickRequest를 사용하여 XML AFAIK를 가져와 구문 분석해야합니다.

링크 된 Apple 튜토리얼의 코드 수정 버전을 사용해 보았습니다. 이 코드는 이 아니며 세계에서 가장 좋은 숫자는이며 많은 오류 처리 기능이 누락되었습니다. 그러나 이것이 내가 가진 유일한 개념입니다.

참고 : 라이브러리 사용을 적극 권장합니다. XMLHttpRequests 및 XML 구문 분석에는 브라우저 불일치가 많이 있습니다. 투자 가치가 있습니다! 뿐만 아니라 결과에서 XML을 자신의 단점이없는 것은 아니다 잡아

function getXHR(url,callback) { 
    var req = false; 
    // branch for native XMLHttpRequest object 
    if(window.XMLHttpRequest && !(window.ActiveXObject)) { 
     try { 
      req = new XMLHttpRequest(); 
     } catch(e) { 
      req = false; 
     } 
    // branch for IE/Windows ActiveX version 
    } else if(window.ActiveXObject) { 
     try { 
      req = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch(e) { 
      try { 
       req = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch(e) { 
       req = false; 
      } 
     } 
    } 

    if(req) { 
     req.onreadystatechange = function() { callback(req) }; 
     req.open("GET", url, true); 
     req.send(""); 
    } 
} 

:

function getXML(response) { 
    if(response.readyState==4) { 
     //Get the xml document element for IE or firefox 
     var xml; 
     if (response.responseXML) { 
       xml = new ActiveXObject("Microsoft.XMLDOM"); 
       xml.async = false; 
       xml.loadXML(response.responseText); 
     } else { 
       xml = response.responseXML; 
     } 

     return xml; 
    } 

    return null; 
} 
아닌 라이브러리 버전에 대한

은 내가 XMLHttpRequest의를 얻기 위해 사파리 코드의 수정 된 버전을 사용

마지막으로 당신이 무엇을 얻을 사용

function callback(response) { 
    var xmlDoc = getXML(response); 
    if(xmlDoc) { 
     //do your work here 
     ... 
    }  
} 

당신이 만약 여전히 문제가 발생하면 문제를 해결할 수있는 몇 가지 사항을 확인할 수 있습니다.

  1. 콘텐츠 유형을 text/xml로 설정 했습니까?
  2. 귀하의 요청으로 실제로 서버로 되돌려 보내고 있습니까?
  3. responseText를 경고/조사하면 속하지 않는 내용이 보입니까?
  4. XML 형식이 올바로 지정 되었습니까? 검사기를 통해 실행하십시오.

행운을 빈다. 건배.

관련 문제