2012-05-15 5 views
3

문제가 있습니다 ... jQuery ajax를 사용하여 XML을 반환하는 웹 서비스를 호출합니다. jQuery ajax는 ie를 제외한 모든 브라우저에서 훌륭하게 작동합니다.XDomainRequest - 호출하지 않음 ... 아무것도하지 않음

예를 들어 브라우저의 경우 XDomainRequest를 사용하고 있습니다. 여기에 코드입니다 :이 정확한 코드는 다른 URL로 응용 프로그램의 다른 곳에서 잘 작동

if ($.browser.msie && window.XDomainRequest) { 
    // Use Microsoft XDR 
    var xdr = new XDomainRequest(); 
    xdr.open("get", theUserUrl); 
    xdr.timeout = 95000; 
    xdr.onerror = function() { 
     console.log('we have an error!'); 
    } 
    xdr.onprogress = function() { 
     console.log('this sucks!'); 
    }; 
    xdr.ontimeout = function() { 
     console.log('it timed out!'); 
    }; 
    xdr.onopen = function() { 
     console.log('we open the xdomainrequest'); 
    }; 
    xdr.onload = function() { 
     // XDomainRequest doesn't provide responseXml, so if you need it: 
     var xml2 = new ActiveXObject("Microsoft.XMLDOM"); 
     xml2.async = false; 
     xml2.loadXML(xdr.responseText); 
     console.log('do we get any response text at all?: ' + xdr.responseText); 
     ParseOwnershipObjects(xml2); 
     //AddServiceRequestsToMap(xml2, map, spinner); 
    }; 
    xdr.send(); 
} 
  • .

    URL은 괜찮습니다. 정확히 브라우저의 내용을 반환합니다. (jquery ajax 호출이 작동하는 이유). 몇 가지를 참고 :

    나는 내 자신의 HTML/자바 스크립트를 다른 사람의 asp.net 프로젝트와 통합하고 있습니다. global.asax.cs 파일에서

, 나는이 :
protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); 
    HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET,OPTIONS"); 
} 

그래서 나는 그것이 헤더 문제가 있다고 생각하지 않습니다.

내 처리기가 작동하지 않습니다. onprogress, ontimeout, onerror ... 아무것도! 웹 서비스를 JSON으로 변환 할 시간이 없습니다.

의견이 있으십니까?

감사합니다. 실제로 사용하지 않은 'XDomainRequest'- -

답변

1

URL 매개 변수에는 XDomainRequest 객체가 올바르게 처리하지 못하는 특수 문자가 있습니다. GET 요청 대신 Internet Explorer 전용 쿼리에서 POST 요청을 사용하려고합니다.

EDIT - JSON 형식으로 출력을 반환하도록 웹 서비스를 전환 했으므로 XDomainRequest가 필요하지 않습니다. JSON을 사용하면 약간의 작업 속도가 향상됩니다.

+0

XDomainRequest의 필요성을 무효화 한 응답 형식 변경 방법을 명확히 할 수 있습니까? 여전히 교차 도메인입니다, 맞습니까? –

+0

JSON을 사용하면 IE 관련 사례에 XDomainRequest 객체 사용을 회피하고 모든 경우에 jQuery ajax를 사용할 수 있습니다. 도메인 간 문제가 사라집니다. jquery Ajax와 JSON 사용에 대한 자세한 내용은이 답변을 확인하십시오. http://stackoverflow.com/a/8894013/575861 – jdb1a1

2

면책 조항 내가 xdomain 요청에 대한 jsonp에 데이터를 설정 JQ를 ... 사용하는 경우

디버깅 - 당신이 (F12) IE 개발자 도구를 사용하고 있습니까? 내가 XDomainRequest 노력하고있어 호기심에서

: - 놓친 당신이 XML


업데이트를 언급 한 부분을 내 잘못의 culpa의 jsonp 물건을 무시 :하지 않으면 오류가 console.log

편집 가능성 . 코드를 복사 한 후 theUserUrl 값을 추가했습니다.

  • 은 위/I 실행 인터넷 익스플로러 개발자 도구가 없다면 consoleundefined이며, 예상 - 그리고 "당신의 핸들러 것도 발사되지 않는다"고 인상을 줄 수 있습니다.

  • 일단 IE 개발 도구 (도킹 또는 기타)를 사용하면 xdr.onerror이 실행됩니다. we have an error이 IE 콘솔에 기록됩니다. 따라서 인 동안 오류 처리기 을 처리합니다.XDomainRequest

    Internet Explorer Dev Tools Consoloe

    빠른 읽기

액세스 제어 - 허용 - 원산지 헤더를 가지고 서버 응답이 필요합니다. 나는 내 서버를 호출하고 있는데 나는 이 아니고이 헤더를 가지고 있지 않다는 것을 알기 때문에 디버깅을하지 않고도 xdr.onerror이 해고되고있는 것은 좋은 추측 일 것이다.

+0

응답 해 주셔서 감사합니다. 나는 F12, 특히 콘솔을 사용 해왔다. 개발자 도구 창을 창에서 떼어 놓으면 테스트 페이지 (예 : http : // localhost : 28730/Test.aspx)를 열 때마다 개발자 도구가 항상 창을 닫습니다. dev 도구를 브라우저 창에 고정 시키면 출력이 나오지 않습니다. 나는 또한 console.log 명령을 사용하지 않고 모든 것을 주석 처리했다. – jdb1a1

+0

@ jdb1a1 업데이트 답변. – EdSF

+0

감사합니다. 콘솔을 여러 번 해설하고 항상 개발자 도구를 실행했기 때문에 콘솔과 관련이 없다고 생각합니다. 그래도 도움을 주셔서 감사합니다. 감사합니다! – jdb1a1

관련 문제