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

时间:2014-04-18 00:40:41

标签: javascript php jquery json internet-explorer

我已经在这个问题上工作了几天并且在这个论坛上伸出手,因为我觉得我已经筋疲力尽了。我有一个在Drupal 7网站上托管的表单,需要将表单值提交给外部URL。该表单通过jQuery.AJAX

使用HTTPS协议的POST请求
  • 表单适用于Chrome,Firefox和Safari
  • 我在IE10 +控制台中收到以下错误(使用IE10 +时,ajax调用总是进入错误函数):
  

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

我尝试了以下内容:

  • 添加contentType:

    // 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, Could not complete the operation due to error 00002ef3

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

10 个答案:

答案 0 :(得分:12)

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

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

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

我想知道是否只有受影响的客户端计算机具有匹配的证书和/或CORS XHR请求中的withCredentials标志是否与此方案相关。

答案 1 :(得分:9)

我在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 off 。如果错误消失,请再次打开并使用 KeepAliveTimeout 的值进行测试。 They can also be set to ms

There is also a way to disable KeepAlive only for Internet Explorer.

答案 2 :(得分:6)

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

当我发现IE11超过Windows 8时,只要我用鼠标点击提交按钮,就不会以很高的概率工作。 但我也发现如果我按下键盘上的回车键,那么IE11就能正常工作。

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

经过一段时间的努力,我来到了这个页面,但没有解决我的问题,因为我对后端技术一无所知。我只是一个知识有限的前端人。

然后我逐一尝试了很多修改。突然,jQuery官方API文档激发了我的灵感。我评论了" contentType"参数使" contentType"采用默认值,即"application/x-www-form-urlencoded; charset=UTF-8"。然后问题就解决了。

希望这会有所帮助。

答案 3 :(得分:6)

我遇到了同样的问题。对我来说,这个问题似乎只发生在IE11上,通过Post调用,我一直在使用AngularJS提供商$ http来进行调用。这似乎是IE中的一个错误,它是一个证书问题。进行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 Clearing Cache with error "Network Error 0x2ef3"

答案 4 :(得分:2)

我有类似的情况,经过大量研究后,问题是另一个问题,但我想在此发布,希望有人可能会发现它有助于寻找同样的错误:

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

答案 5 :(得分:2)

我遇到了IIS应用程序的这个问题,返回一些JSON的AJAX Post请求会失败,最终返回abort,其中包含:

  

SCRIPT7002:XMLHttpRequest:网络错误0x2ef3

控制台中出现

错误。在其他浏览器(Chrome,Firefox,Safari)上,完全相同的AJAX请求也没问题。

进一步调查显示,服务器的响应缺少状态代码 - 在这种情况下应该是500内部错误。

这是使用服务堆栈生成的C#Web应用程序的一部分,需要显式设置错误代码。

IE似乎将连接保持打开状态,最终网络层关闭了它并且它已经中止了#39;请求;尽管收到了内容和其他标题。

更新Web应用程序以正确返回状态代码解决了问题。

IE可能会在帖子中处理标题时出现问题。

希望这有助于某人!

答案 6 :(得分:1)

我在ASP.NET MVC中遇到了同样的错误,最终能够绕过它。我在页面中生成了几百个嵌入表单,每个表单都有@ Html.AntiForgeryToken()。我相信这会导致在客户端创建cookie。可能IE浏览器的空间不足(或者用IE知道的东西)。删除它,我的问题消失了。

答案 7 :(得分:1)

好吧,我在IE 11上收到同样的错误。试图描述导致它尽可能短的原因。

  • 将网站显示为http
  • 该网站对https进行ajax调用
  • ssl是自签名的,但浏览器也没有例外。
  • 创建证书异常后,一切正常。

希望能有所帮助。

答案 8 :(得分:1)

我们在IE11和Edge中看到了同样的错误。一个jQuery AJAX请求在300秒之后一直抛出错误XMLHttpRequest: Network Error 0x2ef3, Could not complete the operation due to error 00002ef3.。 (Chrome和Firefox很好)

我们的负载均衡器(在我们的例子中为F5)被设置为空闲超时设置。我们设法使用Fiddler诊断问题,这在浏览器中产生了更有用的错误消息:Failed to load resource: the server responded with a status of 504 (Fiddler - Receive Failure)请注意,在Fiddler运行的情况下,我们在所有浏览器(包括Chrome和Firefox)中都看到了此错误(300秒后)。 / p>

答案 9 :(得分:0)

我想对我解释这个问题的根本原因。

我们有一个Angular2应用程序,它正在调用我们的NodeJS REST api。其余的API然后调用另一个服务(我相信SOAP)。

我们发现我们的SOAP服务只在一个环境中没有端点(?)(在其他地方工作)。当NodeJS api调用SOAP服务时,soap服务返回一个错误,说“X不是函数”。当错误响应返回给NodeJS时,它没有正确的错误/异常处理,因此它完全取消了服务。因此,UI没有得到回应。