2011-12-12 3 views
2

체크 아웃 한 모든 AJAX 라이브러리에서 XMLHttpRequest는 테스트 또는 try/catch 문을 사용하여 긴 선언을 포함합니다.짧은 XMLHttpRequest 선언에 문제가 있습니까?

은 내가 SOAP GET 요청을 통해 XML을 검색해야하고, 나는 IE7 +, 파이어 폭스와 크롬에서 성공적으로 다음과 같은 선언을 테스트 : 나는 무슨

var xhr=new XMLHttpRequest()||new ActiveXObject("Microsoft.XMLHTTP"); 

를 놓친 거지? 내 선언이 중단 될 수있는 몇 가지 중요한 경우를 간과 했습니까?

편집

그래서 선언의 두 번째 부분은 결코 실행되지 않습니다. 이 IE7 +/파이어 폭스/크롬에 대한 그냥해야한다는 것을 의미합니까 :

var xhr=new XMLHttpRequest(); 
+0

모두'try {...} '블록 안에 있습니까? – Pointy

+0

어 ... 아냐. IE7 +, Firefox 및 Chrome은 분명히 그것을 받아 들였습니다. – Christophe

+0

첫 번째 답변에 이미 나와 있듯이 대부분의 긴 기간 선언은 정당한 이유가 있습니다. 난 그냥 유이, jQuery, 또는 다른 좋아하는 자바 스크립트/AJAX 라이브러리를 사용하고 그것을 함께 할 것입니다. 왜 다시 문제를 해결합니까? :-) – ziesemer

답변

1

new이 precendence을 가지고, 그래서 당신은 new XMLHttpRequest()을 실행하고 반환 값을 확인하고 있습니다. 그러나 XMLHttpRequest이 정의되지 않은 경우이 실행은 이미 오류를 발생시킵니다. 오히려, 당신은 예를 들어, new을 적용하기 전에 XMLHttpRequest이 정의되어 있는지 여부를 확인하려면 :

var xhr = typeof XMLHttpRequest === "undefined" 
      ? new ActiveXObject("Microsoft.XMLHTTP") 
      : new XMLHttpRequest; // you can leave out the parens with no arguments 
+0

doh ... 감사합니다 pimvdb! 내 질문에 업데이트 된, XMLHttpRequest 내 사건에 대한 것 같다. – Christophe

+1

@Christophe : 두 번째 부분 ('||'다음에)이 아무 것도 추가하지 않는다고 말하는 것이 옳습니다. 'new'는 항상 거짓이 아닌 객체를 반환합니다. – pimvdb

+0

제 의견으로는 false를 반환하는 것이 더 유용 할 것입니다 ... 어쨌든 대답에 감사드립니다. – Christophe

3

넌 7 Internet Explorer 버전에 대한 열등 경우를 그리워 :

new ActiveXObject("MSXML2.XMLHTTP"); 

내가하는 기능 createRequest()을 가지고 생각 예를 들어 브라우저에 따라 좋은 객체를 수정하고 반환 할 필요가 없으며 try/catch를 포함하여 오류를 처리하는 것이 더 좋은 방법 일 것입니다.

+0

+1 포장은 확실히 좋은 습관입니다. – Christophe

관련 문제