IE 10和11的CORS状态码为0

4

我遇到了一个IE的bug,但是一直无法解决。我的代码只支持IE 10和11,所以我想以下代码应该没问题。

我有一个AJAX请求:

$.ajax({
    type: {method},
    url: {url},
    cache: false,
    crossDomain: true,
    data: {data to send},
    success: function (data, textStatus, xhr) {
       ///success code
    },
   error: function (xhr, textStatus, errorThrown) {
       //error code
   }
});

这段代码在火狐和谷歌浏览器中表现良好,但在 IE 10、11 中无法正常工作。我一直以为 IE 10、11 已经修复了 CORS 问题,难道不是吗?

为什么我在 IE 10、11 中会收到以下错误信息?

{"readyState":0,"status":0,"statusText":"Error: Access is denied.\r\n"}

如果您正在进行跨域请求,那么无关紧要,但是crossDomain: true不是必需的。(很奇怪,对吧?)如果您想知道原因,请参阅crossDomain选项的文档。 - Kevin B
你确定你实际上是在IE10或11标准模式下运行吗?在开发环境中进行测试时,IE经常会默认为兼容模式,这会将您带回到IE8或IE7。 - Kevin B
我遇到了相同的错误,而且CORS设置已经在服务器上完成,但请求从未出现在IE的网络选项卡中。始终是xhr.status=0。有什么想法吗? - Nilesh Thakkar
谢谢大家。但是我还没有成功。所以对我来说服务器已经正确设置,而且在Chrome和Firefox中一切正常。此外,如果我将用户代理字符串更改为“Google Chrome”,它可以在IE中工作。但是如果我将其设置为IE 10或11,则会出现我之前提到的错误。我也确定我没有使用兼容模式。我刚刚再次仔细检查了一遍。 - David Ward
你需要展示客户端和服务器之间的HTTP流量记录,才能获得进一步的帮助。问题可能出在你的客户端代码或服务器代码中。 - Ray Nicholus
好的,我找到了更多信息。这段代码正在Visualforce页面中运行。我在这里更详细地概述了问题。似乎在Visualforce页面内,我的APEX请求在xhr.open(s.type, s.url, s.async);处失败了。当我在IE上在JSFiddle中运行上面的代码时,一切正常。因此,Visualforce页面必须在IE上做了一些事情。我只是想不出来是什么。 - David Ward
1个回答

3

所以我需要启用“跨域访问数据源”。

步骤:

  1. 选择Internet选项
  2. 选择安全选项卡
  3. 选择自定义级别 ...
  4. 向下滚动到杂项
  5. 找到“跨域访问数据源”
  6. 将值更改为启用

2
你还需要要求所有的客户也这样做,这听起来不太合理。 - Ray Nicholus
我知道,但是有什么替代方案吗? - David Ward
你需要首先展示客户端和服务器之间的HTTP流量记录。 - Ray Nicholus
这是正确的。我很幸运,因为我可以强制用户使用IE 10或更高版本。因此我使用XMLHttpRequest。 - David Ward
1
IE浏览器的整个安全区域业务是其一直以来被认为是糟糕的原因之一,也是持续如此的原因之一。这一切非常令人困惑和不必要。此外,IE还以其他方式违反了同源策略RFC(它没有考虑端口),并且以前曾经砍掉过CORS支持(查看XDomainRequest以获取证据)。看起来你的问题是试图从一个较不安全的区域向一个更安全的区域发出XHR请求。 - Ray Nicholus
显示剩余13条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接