【问题标题】:Getting JSON to work in IE让 JSON 在 IE 中工作
【发布时间】:2012-11-12 07:25:53
【问题描述】:

我在从 IE 中的 JSON 提要获取数据时遇到问题。

这是测试。它在 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.comenvironment.domain.com。我假设 (2) 会有问题,但 (1) 会正常工作吗?

【问题讨论】:

  • 您无法向其他域执行请求。 stackoverflow.com/a/8449129/251311
  • 当对那个 JSON 文件进行 Ajax-request 时,服务器响应包含一个 access-control-allow-origin: http://fiddle.jshell.net HTTP-header,这意味着服务器使用 CORS 并返回请求的 Origin,允许所有跨域请求.但是,IE 不支持 CORS,但它确实为跨域 Ajax 请求提供了一种替代方法。在 IE 中有启用此功能的插件,例如gist.github.com/1114981
  • @zerkms CORS 在该特定服务器上启用。只是jQuery没有为IE提供CORS功能。跨域 Ajax 请求是可能的,或者当然是可能的,并且 OP 的代码在非 IE 浏览器中工作。
  • @Šime Vidas 谢谢大家!我会去看看这个插件是否是我的解决方案。该插件表示IE8+。这是否意味着 IE7 是 SOL?
  • MS 甚至不再支持 IE 7。 IE8也不是。或者IE9。或者 IE10 =) 唯一仍然支持的 IE 版本是 IE11。 前,其他一切都非常正式地达到了 EOL。当然,仍然带有 IE11 的企业或学术机器值得支持,但 IE7 真的,真的不支持。除非您使用的是 very exotic versions of Windows,否则肯定会在您的帖子中提及。

标签: javascript jquery ajax json getjson


【解决方案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。因此,您的 fiddle 将无法在以前版本的 IE 中工作。

【讨论】:

  • IE 确实为执行跨域 Ajax 请求提供了另一种方法。只是jQuery没有使用这种方法(但是有插件可以使用)。
  • 是的,你是对的。你可以使用new XDomainRequest() 对象。我编辑了我的答案,说小提琴不起作用,而不是说跨域请求不起作用。
  • 但是,我在 mec.ca 上的 https:// 页面上进行了此操作,没有进一步更改,但不是 http://。 IE 是否处理这些协议和不同的域..?
  • 不只是 IE,一切都如此:不同的协议意味着不同的来源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 2011-04-11
  • 2013-06-09
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
相关资源
最近更新 更多