IE11在Ajax POST操作期间从iFrame返回状态0(XMLHttpRequest:网络错误0x2ee4)

时间:2014-05-23 03:18:55

标签: javascript ajax iframe https internet-explorer-11

似乎IE11版本11.0.7(Win7上的KB2929437,Win 8.1上的KB2919355)在执行Ajax POST操作时出现问题。操作返回状态0,在F12控制台上,出现以下错误:

SCRIPT7002: XMLHttpRequest: Network Error 0x2ee4, Could not complete the operation due to error 00002ee4.

重现此问题的条件如下:

  1. 仅在特定的IE11上发生,即版本11.0.7(KB2929437 on Win7,KB2919355 on Win 8.1)
  2. iframe用于使用https协议加载外部页面(父页面使用http协议)
  3. 使用方法'POST'的ajax
  4. 更频繁地发生连接:IIS设置Keep-Alive标头
  5. 更频繁地发生在IE11的Win32版本
  6. 我创建了以下jsfiddle来重现此问题:http://jsfiddle.net/VJ2D6/12/

    $(document).ready(function () {
         $('#frame').attr('src', 'https://54.249.142.247/ie11/test.html');
    });
    

    请注意,iframe从另一个站点54.249.142.247(使用IIS7由EC2节点托管)检索其源,因为jsfiddle不托管https。 并且,因为我使用的是自签名SSL证书,请先将证书安装到受信任的根目录,然后从“Internet选项 - 高级”选项卡中关闭“警告证书地址不匹配”。

    在54.249.142.247/ie11/test.html中,我创建了一个按钮,用于启动对不存在位置的Ajax POST操作。通常,此请求应返回状态404错误(未找到)。但是在IE11版本11.0.7的情况下,它经常返回状态0错误并在F12控制台内显示网络错误0x2ee4,“

    我在此处向Microsoft Connect发布了相同的问题:https://connect.microsoft.com/IE/feedback/details/877525/ie11-returns-status-0-during-ajax-post-operation-from-an-iframe-xmlhttprequest-network-error-0x2ee4#tabs

    我认为这是一个IE11错误,但我不是百分百肯定,并且还没有来自IE团队的确认。请帮我确认这是IE漏洞,或者我的JavaScript代码是否有任何问题。

    更新:

    微软表示他们可以重现这个问题并进行调查。

3 个答案:

答案 0 :(得分:5)

此错误导致ssl证书无效。要解决此错误,请参阅:[Link]

    $.get(window.api + 'Values', null, null).done(function () {//solution for IE shit
    $.ajax({
        type: 'POST',
        url: https://api.yourdomain.com,
        data: yourData,
        success: function (data) {
            //do something
        },
    });
});

答案 1 :(得分:4)

我在尝试对我们的HTTPS WCF服务(CORS)进行POST调用时遇到了同样的问题,因为SSL证书看起来很像。 我不得不使用以下MakeCert命令行重新创建我的

makecert.exe -r -pe -n" CN = *。YourDomain.com" -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange -sp" Microsoft RSA SChannel Cryptographic Provider" -a sha256 -sy 12" C:\ EncryptionCert.cer"

将创建的Cert安装到客户端和服务器受信任的根证书Auth。

为我的网站绑定选择此证书后,我能够在IE 11中成功调用我的HTTPS WCF服务。

答案 2 :(得分:-4)

我也有同样的问题。起初我在发布之前使用make get请求。它解决了这个问题。但当我深入了解时,我发现它是互联网选项 - “高级选项

  1. 取消检查服务器证书吊销*
  2. 取消检查发布者证书吊销*
  3. 点击确定
  4. 重新启动浏览器
  5. 我解决了这个问题

    enter image description here