2011-01-19 2 views
8

XDomainRequest (IE8)를 사용하여 json을 반환하는 서비스에 대한 비동기 호출을 만들려고합니다. 문제는 내가 항상 오류가 발생한다는 것입니다 (onerror 이벤트가 발생하고 responseText는 항상 null입니다.) 나는 서비스의 응답을 확인하기 위해 피 들러를 사용하고 있습니다. (나는 json 객체 returnig를 볼 수 있습니다.) 이 문제는 IE8에서 XDomainRequest를 사용할 때만 발생합니다. JQuery에서 구현 된 것과 동일한 기능이 정상적으로 작동합니다.XDomainRequest 문제

실마리가 있습니다. 감사!

P.S : 이것은 내 자바 스크립트 코드는 다음과 같습니다 당신이 요청하는 URL을 일치 -header 서비스가 액세스 제어 - 허용 - 원산지를 전송되어 있는지 확인

..... 
    if (jQuery.browser.msie && window.XDomainRequest) { 
    //Use Microsoft XDR 
    var xdr = new XDomainRequest(); 
    xdr.open("post", url); 
    xdr.onload = function() { 
     alert("Loading"); 
     alert(xdr.responseText); 
    }; 
    xdr.onsuccess = function() { 
     alert("Success!"); 
     alert(xdr.responseText); 
    }; 
    xdr.onerror = function() { 
     alert("Error!"); 
     alert(xdr.responseText); 
    }; 
    xdr.onprogress = function() { 
     alert("Progress"); 
     alert(xdr.responseText); 
    }; 
    xdr.timeout = 1000; 
    xdr.send("data: " + escape(data)); 
    var response = xdr.responseText; 
} else ..... 

답변

8

있습니까?

+0

감사합니다! 이 머리글을 추가하는 것을 잊어 버립니다. – GiaNU

+0

감사합니다! 나는 ** Access-Allow-Control-Origin **을 실수로 넣었습니다. – Sam

+0

를 설명하십시오. – Amit

4

앙드레 Pedroso의 년 이전 게시물 ,, 아직도 당신 GiaNU! xdr.onsuccess를 호출하고 있지만 해당 메소드가 존재하지 않는다고 생각합니다. xdr.onload가 작동하고 jQuery의 AJAX "success"함수와 동일한 것으로 보입니다.

이 X-도메인 물건은 매우 새로운하지만 지금은 여기에 MS에서 사용할 수있는 아주 좋은 작업 모델이 : AJAX - Introducing Cross-domain Request (XDR)

나는 일을 얻을 수 xdr.ontimeout는하지만, 찾을 수 없습니다 아직 필요 : :) 나는 물건을 얻었고 jQuery를 먼저 실행했고 지금은 ie9와 함께 MS 포스트에 감사의 말을 전한다.

XDR 내 현재 응용 프로그램에 대한 타이밍에 몇 가지 문제를 가지고 있으며, 단지 그것을 처리하기 위해 타임 아웃을 사용 : 당신이 다음 "액세스 -를 카시니를 통해 서비스를 실행하는 경우

xdr.onload = setTimeout(function(){ doIt(xdr.responseText), 2000}); 
+0

물론 저는 여기에 있습니다.). 답변 해 주셔서 감사합니다. – GiaNU

+0

고마워,이게 내가 필요로하는 해결책 이었어! – markyd13

+0

setTimeout 도움이되지 않습니다. 실제 문제는 열린 요청이 열려있는 동안 IE8에서 XDomainRequest를 가비지 수집 할 수 있다는 것입니다. setTimeout 호출을 보면 가비지 컬렉터가 약간 더 길어지는 것을 피하는 XDR 변수를 캡쳐하고 있습니다. 단지 문제 만 옮깁니다. 해결 방법에 대한 자세한 답변은 http : // stackoverflow에 게시되었습니다.co.kr/questions/8058446/ie-xdomainrequest-always-always-work – ShadowChaser

1

또 다른 잡았다입니다 카시니가 이것을 인식하지 못하기 때문에 Control-Allow-Origin 헤더가 반환되지 않습니다. 서비스 요청이 테스트 서버에서 작동하지만 로컬에서 작동하지 않는 시나리오가있었습니다. 서비스는 Cashini의 로컬 Dev 시스템에서 호스팅되었지만 테스트 서버의 IIS에서 호스팅됩니다.

또한 여기 모든 사용자를위한 설정의 web.config이다 (참고 :이 모든 도메인에서 액세스 할 수 있습니다 - "*") :

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     </customHeaders> 
    </httpProtocol> 
    </system.webServer>