让JSON在IE中工作

时间:2012-11-24 01:10:14

标签: javascript jquery ajax json getjson

我无法从IE中的JSON Feed获取数据。

这是测试。它在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)会正常工作吗?

1 个答案:

答案 0 :(得分: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标准方面落后,因此直到IE10才将其添加到IE中。因此,您的小提琴将无法在以前版本的IE中使用。