IE10/11 Ajax XHR 错误 - SCRIPT7002:XMLHttpRequest:网络错误 0x2ef3

IT技术 javascript php jquery json internet-explorer
2021-03-05 00:29:38

我已经在这个问题上研究了几天并在这个论坛上伸出援手,因为我觉得我已经用尽了我的选择。我有一个托管在 Drupal 7 网站上的表单,需要将表单值提交到外部 url。该表单通过 jQuery.AJAX 通过 HTTPS 协议使用 POST 请求

  • 表单在 Chrome、Firefox 和 Safari 中运行良好
  • 我在 IE10+ 控制台中收到以下错误(使用 IE10+ 时,ajax 调用总是进入错误函数):

SCRIPT7002:XMLHttpRequest:网络错误 0x2ef3,由于错误 00002ef3 无法完成操作

我尝试了以下方法:

  • 添加内容类型:

    // causes all of the jQuery callbacks to error out
    "application/json; charset=utf-8",
    
  • 在实际 POST 之前尝试 Ajax GET 调用(如另一个 SO 线程上的建议)

  • 添加header( 'Content-Type: application/json; charset=utf-8' );到请求中

  • crossDomain: true

添加了相应的 CORS 标头,并将表单代码粘贴在下面:

$.ajax({
    url: "[URL]", //the page to receive the form data  
    crossDomain: true,
    type: "POST",
    data: dataString, //posting to API 
    dataType: "json", //the data type the function should expect back from the server     
    success: function(data) {         
        if (data.response_status == "1") { //error for at least 1 field
             //display error message 
             }
             else { 
             //display thank you label next to input
             }

        } else {
           //All form fields completed successfully! Redirect user to Thank you confirmation page            
        } 
     },
    error: function(jqXHR, textStatus, errorThrown) {
             alert("there is an error!");
             console.log("in error section");
             console.log("jqXHR: " + jqXHR);
             console.log("jqXHR.responseText: " + jqXHR.responseText);
             console.log("textStatus: " + textStatus);
             console.log("errorThrown: " + errorThrown);
             data = $.parseJSON(jqXHR.responseText);
             console.log("parseJSON data: " + data);                           
    }        
    });         
  });
});

我已阅读 SCRIPT7002: XMLHttpRequest: Network Error 0x2ef3,由于错误 00002ef3 无法完成操作

任何指导都会有所帮助!谢谢

6个回答

OP 提供了一个 WireShark 捕获,显示服务器使用 HTTPSCertificateRequest消息请求证书,然后客户端立即FIN建立连接。

将服务器配置为不请求客户端证书后,问题就消失了。

使用 Fiddler 也会使问题消失,因为除非您将其配置为这样做,否则 Fiddler 永远不会从浏览器请求客户端证书。

我想知道是否只有受影响的客户端机器有匹配的证书和/或withCredentialsCORS XHR 请求上的标志在这种情况下是否相关。

@Ron:“这个”的意思是“禁用证书请求”?这取决于服务器;在 IIS8 中,它位于“SSL 设置 > 客户端证书”单选按钮下。
2021-04-27 00:29:38
@EricLaw,你能提供一些细节吗?
2021-05-02 00:29:38
@ThePyroEagle:如果是这种情况,您可能应该打开一个新问题并附上您的网站发送的确切内容的网络日志(或共享 URL)。
2021-05-06 00:29:38
即使我的服务器不在 HTTPS 模式下运行并且它不请求浏览器证书,我也会收到此错误。
2021-05-10 00:29:38
禁用服务器的 CertificateRequest 修复了 IE10/11 中的问题。谢谢!
2021-05-20 00:29:38

我在 IE 8+9+10+11 Ajax 调用中随机看到此错误。所有其他浏览器都没有问题。

它假设 KeepAlive 连接之间存在竞争条件。我正在使用 Apache 2.4.7。

使用/etc/apache2/apache2.conf 中的 Apache 2 默认设置,我能够重现关于每十次 Ajax 调用的错误:

KeepAlive On
KeepAliveTimeout 5

解决方案:任一设置

KeepAlive off

或者

KeepAliveTimeout 1

为我解决了这个问题。我建议任何遇到0x2ef3-Network 错误的人首先将服务器上的KeepAlive设置为关闭如果错误消失,请再次打开它并使用KeepAliveTimeout的值进行测试它们也可以设置为 ms

还有一种方法可以为 Internet Explorer 禁用 KeepAlive。

0x2ef3-网络错误似乎是 HTTP 和 IE 的一些问题的总称。但其中之一肯定是 IE 生成的 POST Ajax 请求中 2 个包的竞争条件。至少,在 Glassfish 或 IE 上关闭 KeepAlive 可以解决问题
2021-04-22 00:29:38
我想指出这解决了我的问题。我正在使用 Magento 1.9.0.1 和 Apache。非常感谢你!
2021-05-17 00:29:38
此修复程序似乎解决了我们网站之一(woocommerce 2.2.8)的问题。不过这是暂时的:最近的版本在代码中解决了这个问题,因此这是我们升级后的首选路线。
2021-05-18 00:29:38

在我的环境中,我首先复制/粘贴了一些旧代码以供使用。所以“ contentType”是"application/json"

当我发现 Windows 8 上的 IE11 很可能不起作用时,只要我使用鼠标单击提交按钮。但我也发现如果我按下键盘上的回车键,那么它在 IE11 上工作得很好。

请注意,我的input元素和提交button嵌套在一个form元素中。

挣扎了一会儿,来到这个页面,但是没有解决我的问题,因为我对后端技术一无所知。我只是一个知识有限的前端人员。

然后我一一尝试了很多修改。突然,jQuery 官方 API 文档启发了我。我注释掉了“ contentType”参数,以便“ contentType”采用默认值,即"application/x-www-form-urlencoded; charset=UTF-8". 那么问题就解决了。

希望这会有所帮助。

谢谢!尝试了很多建议,我所要做的就是删除 contentType 参数... :)
2021-04-22 00:29:38
这仅在您的服务不期望格式化对象时才有效(即默认情况下,.NET WCF 服务期望格式化 JSON 或 XML)。
2021-05-03 00:29:38

我遇到了同样的问题。对我来说,这个问题似乎只在 IE11 中通过 Post 调用发生,我一直在使用 AngularJS 提供程序 $http 进行调用。这个好像是IE的bug,是证书问题。进行 POST 调用时,未正确加载安全证书信息。作为一种解决方法,在进行 POST 调用之前,进行 GET 调用以正确加载证书。看看下面的示例代码(它使用的是 AngularJS)

$http({
    method: "GET",
    url: "/api/DummyGet"
}).success(
$http({
        method: "POST",
        url: "/api/PostCall",
        data: data
})
);

有关更多信息,您可以查看这两个链接 - http://jonnyreeves.co.uk/2013/making-xhr-request-to-https-domains-with-winjs/
- IE10/IE11 Abort Post Ajax Request After清除缓存时出现错误“网络错误 0x2ef3”

将近 4 年后,这在 Angular6 中对我有用。不要忘记在进行 POST 之前等待 GET 请求完成
2021-05-02 00:29:38
很高兴听到!!
2021-05-14 00:29:38

我遇到了类似的情况,经过大量研究,问题有所不同,但我想将其发布在这里,希望有人可能会发现它对查找相同错误有所帮助:

Apache 的连接超时为 5 秒。Win 7 上的 Internet Explorer 11 似乎忽略了不再有活动会话的事实,假设它将是 60 秒。将 Apache 设置更改为 60 秒的超时后,我的问题得到解决。

“不再有活动会话,假设它将是 60 秒” 目前尚不清楚“活动会话”究竟是什么意思。任何客户端或服务器都可以在其空闲时随时关闭 HTTP 连接,如果连接关闭,浏览器将使用新连接。
2021-04-21 00:29:38
IE的一个已知bug,IE由于某种原因不会创建新的连接
2021-05-16 00:29:38