IE11 XMLRequest访问被拒绝

时间:2014-05-20 22:26:39

标签: javascript exception xmlhttprequest cors internet-explorer-11

我试图在http://localhost:8080/上做一个简单的AJAX请求,并且在使用IE 11时我立即收到错误。我不认为IE甚至试图发送任何内容。

有人遇到过这个问题吗?

以下是显示此行为的fiddle

HTML:

<button id='btn1'>launch</button>

的onLoad:

var xhr,btn=document.getElementById('btn1');
btn.onclick=onButton;

var onReadyState=function(){
  console.log('ready state:'+_xhr.readyState);
  if(xhr.readyState===4){
    console.log('status:'+_xhr.status);
  }
}

function onButton(){
  xhr=new window.XMLHttpRequest();
  xhr.onreadystatechange=onReadyState;
  xhr.open('POST','http://localhost:8080/ScanAPI/v1/client');
  xhr.send();
}

在尝试之前,您需要启动IE F12开发人员工具,您将看到IE捕获异常。

对此的任何帮助将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:2)

它不起作用,因为您正在引用_xhr函数范围内不存在的名为onReadyState的对象。

您应该使用this代替:

var onReadyState = function() {
    if (this.readyState === 4) {
        console.log('status :' + this.status);
    }
};

这是因为XMLHttpRequest对象会使用自己的上下文回调onReadyState,可以通过函数中的this访问该上下文。

另请注意,onReadyState函数在其定义的末尾错过了一个分号,并没有一眼就注意到它。

编辑:我还注意到IE10(和IE11)确实解释了some HTTP response code as network errors(例如使用401响应代码),如果是你的情况,那么它因为IE在检索你的资源时失败了。

我将你的小提琴和wrote a simple page分开,与IE11配合得很好。