2012-11-24 2 views
1

IE의 JSON 피드에서 데이터를 가져 오는 데 문제가 있습니다.IE에서 작동하도록 JSON 받기

다음은 테스트입니다. 그것은 FF, 크롬, 사파리에 경고 있지만 IE :

function do_something(data){ 
    alert(data); 
} 

$(document).ready(function() { 
    $.getJSON('https://www.mec.ca/api/v1/stores/1', do_something); 
}); 

을 그리고 여기에 바이올린입니다 : http://jsfiddle.net/upksp/

나는 행운과 질문 겉보기에 관련하는 다음과 같은 솔루션을 시도 :

헤더에 문제가 있다고 생각할 수는 있지만 진단에 대해 충분히 알지 못합니다. 같은 페이지에서 JSONP를 아무 문제없이 성공적으로 사용했는데 충돌이 없습니다. 도움!


참고 : 내가 일하고 있어요 코드에 대한는 API가 요청 스크립트와 같은 도메인 (1)에있을 것입니다. 그러나 테스트를 위해 그들은 www.domain.comenvironment.domain.com과 같은 다른 하위 도메인 (2)을 갖습니다. 나는 (2) 문제가있을 것이라고 생각 하나, (1) 잘 작동 할까?

+0

다른 도메인으로 요청을 수행 할 수 없습니다. http://stackoverflow.com/a/8449129/251311 – zerkms

+1

해당 JSON 파일에 대한 Ajax 요청을 할 때 서버 응답에는'access-control-allow-origin : http : // fiddle.jshell.net' HTTP가 포함됩니다 -header는 서버가 CORS를 사용하고 요청의 Origin을 반환하여 모든 도메인 간 요청을 허용한다는 것을 의미합니다. 그러나 IE는 CORS를 지원하지 않지만 Ajax 요청을 교차 도메인 화하는 대체 방법을 제공합니다. IE에서이 기능을 사용할 수있는 플러그인이 있습니다 (예 : https://gist.github.com/1114981 –

+0

해당 서버에서 @zerkms CORS를 사용할 수 있습니다. jQuery가 IE 용 CORS 기능을 제공하지 않는다는 것입니다. 교차 도메인 Ajax 요청은 물론 가능하며 OP 코드는 IE가 아닌 브라우저에서도 작동합니다. –

답변

1

브라우저의 보안상의 이유로 브라우저를 한 곳에서 다른 곳으로 요청할 수 없습니다 (예 : jsfiddle.net에서 www.mec.ca). 최근 몇 년 동안 브라우저는 CORS (Cross-Origin Resource Sharing)를 사용하여 이것을 피하기 시작했습니다. 이렇게하면 해당 서버 (www.mec.ca)가이를 허용하도록 구성되어있는 한 브라우저는 다른 도메인에 요청할 수 있습니다. 응답 헤더에서이를 확인할 수 있습니다. url (https://www.mec.ca/api/v1/stores/1)의 경우 CORS가 사용됩니다. 말하는 라인의 응답 헤더에서이를 볼 수 있습니다. Access-Control-Allow-Origin: *. 이것은 IE가 뒤에 CORS 표준을 구현 느껴지있다, 그것은 IE10까지 IE에 추가되지 않았기 때문에 요청이 모든 도메인 (*)

HTTP/1.1 200 OK 
Date: Sat, 24 Nov 2012 01:19:23 GMT 
Server: Apache 
Content-Language: en 
Access-Control-Allow-Origin: * 
X-Powered-By: Servlet/2.5 JSP/2.1 
Vary: Accept-Encoding,User-Agent 
Transfer-Encoding: chunked 
Content-Type: application/json 

에서 허용되는 것을 의미한다. 따라서 이전 버전의 IE에서는 바이올린이 작동하지 않습니다.

+1

IE는 도메인 간 Ajax 요청을 수행하는 대체 방법을 제공합니다. 그것은 jQuery가이 메소드를 사용하지 않는다는 것입니다 (그러나 플러그인이 있습니다). –

+0

예, 당신 말이 맞아요. 당신은'new XDomainRequest()'객체를 사용할 수 있습니다. 내 대답을 편집하면 도메인 간 요청이 작동하지 않는다고 말하는 대신 바이올린이 작동하지 않습니다. – teddybeard

+0

그러나 http : //가 아닌 https : // 페이지에서 mec.ca에서이 작업을 수행 할 수 있습니다. IE는 이러한 프로토콜과 다른 도메인을 처리합니까? – chicgeek

관련 문제