2012-11-24 51 views
1

我在从IE中的JSON feed获取数据时遇到了问题。让JSON在IE中工作

这是测试。它提醒在FF,Chrome浏览器,Safari浏览器,而不是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)作为被请求它的脚本。然而,对于测试,他们将有不同的子域(2),如www.domain.com vs environment.domain.com。我认为(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(跨源资源共享)来规避这种情况。这允许浏览器向另一个域发出请求,只要该服务器(www.mec.ca)配置为接受它们即可。您可以在响应头中检查这一点。对于您的网址(https://www.mec.ca/api/v1/stores/1),CORS已启用。你可以在所说的行的响应标题中看到它。 Access-Control-Allow-Origin: *。这意味着请求从任何域(*)

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已经落后在实施CORS标准的后面,它没有添加到IE直到IE10。因此,你的小提琴在以前的IE版本中不起作用。

+1

IE确实为跨域Ajax请求提供了一种替代方法。只是jQuery没有使用这个方法(但是有插件可以)。 –

+0

是的,你是对的。你可以使用'new XDomainRequest()'对象。我编辑我的答案说,小提琴不会工作,而不是说跨域请求不会工作。 – teddybeard

+0

但是,我在https://页面上使用了mec.ca,没有进一步更改,但没有http://。 IE对待这些协议和不同的域名? – chicgeek