IE 10中的XmlHttpRequest状态为0而不是401

时间:2013-04-18 11:07:58

标签: javascript xmlhttprequest cors internet-explorer-10

我遇到了这个问题。我想这是某种IE错误,但我想确定。

所以问题是。为什么IE10 XmlHttpRequest.status返回0而不是401?

var xmlhttp=new XMLHttpRequest();

xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4)
    {
      document.getElementById("rescode").innerHTML="Request completed with status: "+xmlhttp.status;
    }
  }
xmlhttp.open("GET","http://hosting.gregy.cz/cors/",true);
xmlhttp.send();

请在此处查看plunker:http://plnkr.co/edit/E2lCflPDHHaQi7t79IeM?p=preview

此代码触发CORS请求,该请求始终返回401. Firefox和chrome在状态属性中正确返回401,但IE10返回0.此问题会破坏我用于项目的身份验证处理方法。

谢谢

修改

我已经使用onload和onerror事件处理程序修改了plunker(来自monsur评论的提示),但结果仍然相同。

我还确保IE10没有选择兼容模式。 (来自cernunnos评论的提示)

2 个答案:

答案 0 :(得分:20)

这似乎是IE10中的错误(https://connect.microsoft.com/IE/feedback/details/785990/ie-10-on-win8-does-not-assign-the-correct-status-to-xmlhttprequest-when-the-result-is-401)。

IE10将HTTP状态401视为网络错误。控制台显示:

SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied

根据XMLHttpRequest Level 2规范,如果设置了错误标志,则status属性应为零(例如,由于网络错误)。但是,规范还指出(http://www.w3.org/TR/XMLHttpRequest2/#infrastructure-for-the-send-method)网络错误

  

不包含指示某种类型错误的HTTP响应,例如   作为HTTP状态代码410。

我认为很明显,HTTP状态401因此不应被视为网络错误(因为它不在Chrome,Firefox和Safari中)并且这是IE10中的错误。

答案 1 :(得分:3)

我今天遇到了这个问题。在尝试了一些解决方法和一些Googleing之后,我最终在这里。 结果只是一个安全级别的设置。 无论您的网站位于哪个安全区域(Int​​ernet选项>安全),请确保您在区域中启用以下设置:其他>跨域访问数据源。