我已经在这个问题上工作了几天并且在这个论坛上伸出手,因为我觉得我已经筋疲力尽了。我有一个在Drupal 7网站上托管的表单,需要将表单值提交给外部URL。该表单通过jQuery.AJAX
使用HTTPS协议的POST请求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);
}
});
});
});
任何指导都会有所帮助!致谢
答案 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上收到同样的错误。试图描述导致它尽可能短的原因。
希望能有所帮助。
答案 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没有得到回应。