IE에서 jQuery ajax 호출시 '전송 없음'오류


110

장소를 검색하려면 Foursquare API를 사용해야합니다. 물론 교차 도메인입니다.

Firefox에서는 문제가 없지만 Internet Explorer에서는 문제가 없습니다 (7, 8, 9 테스트했습니다).

내 자바 스크립트 코드는 다음과 같습니다.

searchVenues: function(searchQuery) {
    $.ajax({
       url: 'https://api.foursquare.com/v2/venues/search',
       data: {
            sw: bound_south_west,
            ne: bound_north_east,
            query: searchQuery.query,
            oauth_token: FSQ_OAUTH_TOKEN,
            limit: 25,
            intent: 'browse',
            v: 20120206
       },
       cache: false,
       dataType: 'json',
       success: function(data) {
           displayResults(data, searchQuery.query);
       },
       error: function(xhr, status, errorThrown) {
           console.log(errorThrown+'\n'+status+'\n'+xhr.statusText);
       }
    });
}

Firefox에서는 수신 된 데이터를 완벽하게 표시합니다. Internet Explorer에서는 콘솔에 로그온합니다.

No Transport
Error
Error

어떻게해야합니까?


답변:


265

Windows Mobile 7에서 테스트했습니다.

이해하는 데 많은 시간을 보낸 후 마침내 다음을 발견했습니다.

http://bugs.jquery.com/ticket/10660

해결책은 간단합니다.

$.support.cors = true;

Ajax 도메인 간 요청이 작동합니다!


47
나는 점점 오전 '오류 : 액세스가 거부되었습니다'IE8 및 IE9에서뿐만 아니라
대런 쿠니

1
받아 들여진 대답이 IE8 또는 IE9의 문제를 실제로 해결하지 못한다는 것은 다소 실망 스럽습니다.
Warren Rumak

2
비슷한 문제가 있습니다. IE10에서는 작동하지만 IE8 또는 IE9에서는 작동하지 않음
mishka 2014

7
또한 "오류 : 액세스가 거부되었습니다"라는 메시지가 나타났습니다. 제 실수는 HTTP 도메인에서 HTTPS 콘텐츠를 가져온 것입니다. (HTTP 또는 HTTPS) 확인 귀하의 웹 사이트와 아약스 대상이 동일한 프로토콜을 사용해야합니다
의 Torben

2
이제 기본적으로 설정되어 있다고 생각합니다. 나를 위해이 솔루션은 XDR 요청 전송했다 -이 인기있는 대답을 참조하십시오 stackoverflow.com/a/10232313/217866
jackocnr

13
jQuery.support.cors = true;

$.ajax({
  crossDomain: true,
  url: "",
  type: "POST",
  dataType: "xml",
  data: soapMessage,
});

교차 도메인 값을 true로 만들어야합니다.


8
귀하의 답변과 귀하의 답변보다 훨씬 이전에 게시 된 수락 된 답변의 차이점은 무엇입니까?
javanna 2013 년

2
@javanna crossDomain: true옵션 인수에 대한 추가 .
Chris Marasti-Georg

8
교차 도메인은 무엇이며 이것이 사실이어야하는 이유는 무엇입니까?
Aziz Saleh

당신은 내가 착각하지 않으면 기본적으로하는 crossDomain: true것이 필요하지 않습니다$.support.cors
Mark Pieszak-Trilon.io

7

이 문제는 한동안 나를 괴롭 혔습니다. 해결 방법으로 동일한 사이트에있는 프록시 스크립트를 사용합니다. 이러한 스크립트는 단순히 서버 간 ajax가 아닌 HTTP 요청 (컬 및 WinHttp.WinHttpRequest를 생각)을 실행하고 상태 및 데이터를 호출자에게 다시 전달합니다. 작동하지만 두 개의 HTTP 요청을 수행해야하기 때문에 분명히 효율적이지 않습니다.

필자의 경우 솔루션은 위에서 설명한 모든 항목과 'Access-Control-Allow-Origin'헤더의 조합입니다.

$.support.cors = true; // this must precede $.ajax({}) configuration

$.ajax({
  crossDomain: true, // added in jQuery 1.5
  headers: {
    'Access-Control-Allow-Origin': '*'
  },
  ...
});

이러한 호출에 응답하는 웹 서비스는 'Access-Control-Allow-Origin : *'헤더로도 응답합니다.


4
... 그러나 이것은 CORS 헤더를 언급하는 첫 번째 답변입니다. 허용 된 솔루션이 저에게 효과적이지 않았습니다.
seanhodges

2
나는 이것이 오히려 서비스의 web.config에 있어야한다고 생각합니다.
Fjodr 2015

6

이 솔루션을 시도하십시오.

https://stackoverflow.com/a/14463975/237091

또는 jquery를 포함시킨 직후에이 코드를 HTML에 넣으십시오.

<!--[if lte IE 9]>
<script type='text/javascript' src='//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js'></script>
<![endif]-->

Android의 Chrome (및 Android 브라우저)에서 동일한 문제가 발생하는 것을 발견 했으므로 모든 브라우저에서이 스크립트를 사용할 수 있도록 조건부 주석을 생략 할 수 있습니다. (프로젝트 홈페이지는 여기에 있습니다 : github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest )
Dave Burt

1
이것은 나를 위해 일했습니다. 응답 콘텐츠 유형이 'text / plain'인지 확인하는 것 외에도
Nikolay Melnikov

jquery 후에 Grunt에 추가했고 이제 작동합니다 ( npmjs.com/package/jquery-ajax-transport-xdomainrequest ).
tobias47n9e 2011

0

방금 jquery 버전을 변경하고 CDN 링크를 교체했는데 작동했습니다! crossDomain:trueand $.support.cors= true가 작동하지 않는 경우에만 수행하십시오 .

<script src="https://code.jquery.com/jquery-3.5.1.js" integrity="sha256-QWo7LDvxbWT2tbbQ97B53yJnYU3WhH/C8ycbRAkjPDc=" crossorigin="anonymous"></script>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.