2013-02-15 5 views
0

jquery의 ajax-function을 사용하여 원격 서버에서 json을 얻으려고합니다.jQuery ajax 호출이 IE에서 작동하지 않습니다.

var self = $(this); 
$.ajax({ 
    cache: false, 
    url: *external url*, 
    data: {param: self.val()}, 
    type: 'GET', 
    dataType: 'application/json', 
    crossDomain: true, 
    success: function(data, status) { 
     console.log(status); 
     console.log(data); 
    } 
}); 

Chrome에서 정상적으로 작동하므로 데이터가 출력됩니다. firefox에서는 요청이 전송되지만 콘솔에 데이터가 기록되지 않습니다. IE에서는 전화가 전혀 전송되지 않는 것 같습니다.

내가 뭘 잘못하고 있니? 나는 cross-domain-blocking에 대해서 알고 있지만, 무엇이 나를 없애는가는 크롬에서 작동하지만 다른 어떤 브라우저에서는 그렇지 않다는 것이다.

미리 감사드립니다.

+0

Chrome에서 작동하는지 어떻게 알 수 있습니까? 'error' 핸들러를 추가하십시오. – BenM

+0

크로스 도메인을 제거하면 작동합니까? – CR41G14

+0

크롬에서는 success-function이 제대로 호출되고 내용이 콘솔에 출력되므로 제대로 작동한다고 생각했습니다. – Mikau

답변

0

나는 cross-domain-blocking에 대해 알고있다. 그러나 나는 크롬에서 작동하지만 다른 브라우저에서는 작동하지 않는다.

그것은 당신이 지원 CORS에서 데이터를 요청하는 서버처럼 들리지만, 브라우저가 서버 헤더를 보내는 경우 다른 브라우저는 요청과 함께 다른 헤더를 보낼 수 있으며, CORS 요청이 실패 할 것을 명심 그렇다고하지 않습니다. 따라서 Chrome이 서버가 승인 한 헤더 만 전송하기 때문에 요청이 작동하지만 Firefox가 서버가 승인하지 않은 헤더를 보내고 있으므로 요청이 작동하지 않을 수 있습니다.

XMLHttpRequest 개체 대신 XDomainRequest 개체를 사용하고 jQuery가이를 수행하지 않으면 IE에서 도메인 간 요청이 작동하지 않기 때문에 IE10을 사용하지 않는 한 IE가 작동하지 않는 것 같습니다. 이 작업을 수행하는 패치가 있지만 jQuery 라이브러리 자체는 그렇지 않습니다. IE10 마침내은 표준 XMLHttpRequest 개체를 통해 CORS를 사용합니다.

+0

저는 IE9에 있습니다. 그래서 그럴 수도 있고, 그 경우에는 요청이 보내지지 않을 것입니다, 맞습니까? jQuery에 패치를 적용하지 않고이를 해결할 수있는 방법이 있습니까? – Mikau

+0

@Mikau : IE9가 'XMLHttpRequest'를 사용할 때 SOP를 시행하는 시점을 모르지만 전혀 보내지 않아도됩니다. 그렇습니다. 유일한 해결 방법은 직접'XDomainRequest'를 사용하는 것입니다. 패치 jQuery (빠른 검색은 무언가를 찾아야합니다)를 사용하거나 전혀 아약스를 사용하지 않음으로써 SOP를 우회합니다. (아마도 [JSONP] (http://en.wikipedia.org)/wiki/JSONP # JSONP), 서버가이를 지원한다면 - CORS를 지원하고 JSON을 제공한다면 JSONP 옵션도 기대할 수 있습니다. –

관련 문제