2010-04-17 5 views
3

IE8에서 AJAX 요청을 만들려고합니다.IE8 AJAX URL에서 params가 제공되지 않으면 setRequestHeaders가 작동하지 않습니다.

var xhr = new ActiveXObject('Msxml2.XMLHTTP'); 
xhr.open('GET', '/ajax/'); 
// Required header for Django to detect AJAX request 
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); 
xhr.onreadystatechange = function() { 
    if (this.readyState == 4) console.log(this.responseText); 
} 
xhr.send(null); 

Firefox, Chrome, Safari에서 완벽하게 작동합니다. 그러나 IE8에서는 모든 AJAX 테스트 요청이 위와 같은 쿼리 문자열 매개 변수없이 GET을 수행하는 경우를 제외하고 모두 작동합니다. 게시물이 같은 URL에 쿼리 문자열을 포함 할 때마다에서만 작동 문제없이 작동하고, 요청을 GET :

xhr.open('GET', '/ajax/?foo=bar') 

나는 또한 내 서버 코드가 적절히 이러한 요청을 처리하는 것을 110 % 긍정적 인, 그래서이 나무 그루터기 나 완전히.

누군가이 문제의 원인에 대해 단서가 있습니까?

+0

나는 그것이 당신이 찾고있는 대답이 아닐 수도 있습니다. 왜 jquery를 사용하지 않습니까? 브라우저 호환성에 대한 모든 책임은 귀하에게 있습니다. 그래서 한번 시도해보십시오. 또한 코드의 대부분을 변경하지 않습니다. :) – Bipul

+0

wireshark와 같은 것을 사용하여 IE가 HTTP 요청을 전혀 발행하지 않는지 여부를 결정 해 봤니? 즉, 브라우저가 "캐시에 URL이있어 HTTP 요청을 실행할 필요가 없습니다."라고 결정하지 않았습니까? – Pointy

+0

@Pointy - 캐시를 지우고 변경 한 후에 서버를 다시 시작해야합니다. @ Bipul - 내 자신의 프레임 워크를 쓰고 있지만 jQuery = 사랑 해요.) – ground5hark

답변

0

표준은 GET 요청에 (a) 쿼리 매개 변수가 있음을 지정합니다. 내 추측에 따르면 MSIE8은이 경우 적절하게 작동하고 다른 브라우저는 '슬라이드를 허용'합니다.

페이지를로드하려는 경우 파일에 GET 요청을 보내면/freads/내용 파일이 포함되어 다시 전송됩니다. 이 경우 매개 변수로 전송 된 페이지 (예 : ?foo=bar)를 포함하는 중간 파일이 있습니다.

어떤 경우 든 jQuery를 사용하여 corrent HTTP 개체를 선택해야합니다. 다음과 같이 완벽하게 호환되도록하십시오 :

var XMLHttpArray = [       
    function() {return new XMLHttpRequest();}, 
    function() {return new ActiveXObject("Msxml2.XMLHTTP");}, 
    function() {return new ActiveXObject("Msxml2.XMLHTTP");}, 
    function() {return new ActiveXObject("Microsoft.XMLHTTP");}  
]; 

function XMLHTTPObject(){ 
    var xmlhttp = false; 
    for(var i=0; i<XMLHttpArray.length; i++){ 
      try{ 
        xmlhttp = XMLHttpArray[i](); 
      }catch(e){ 
        continue; 
      } 
      break; 
    } 
    return xmlhttp;  
}; 

var http = XMLHTTPObject(); 
http.open(...); 
관련 문제