17

一个多星期把我的头发拉出来。

使用:

jQuery 1.9.1

使用类似于 JSON 示例的 malsup 表单插件:http: //malsup.com/jquery/form/#json

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" /> with of without same error

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Internet Explorer (8/9/10) 将随机中止 AJAX POST 请求(非常随机)

通过中止,我的意思是,“根本”没有通过 http 发送任何内容——它只是中止,然后让我泪流满面。

网络下的F12开发者工具读取:

网址我的网址是正确的

结果(中止)它的字面意思是(中止)

输入空白 - 这里实际上什么都没有

收到0B

耗时 202 毫秒

发起者(待定)它的字面意思是(待定)

打开请求的捕获:

请求标头为空

请求正文为空

一切都是空的

但是在 Timings 选项卡下,我注意到它按顺序显示 Wait Start Start Gap DOMContentLoaded (event) Load (Event)

应该 开始有两次?还是我以某种方式提交了两次请求,这是导致中止的原因。

我会说,成功的 POSTS在时间选项卡下启动了两次。

我也 console.log 错误并得到:

xmlhttprequest.ReadyState 4

xmlhttprequest.状态:12019

当我第二次单击提交时,它可以工作。客户不会喜欢这样...

$('#formId').ajaxForm( {
    dataType :  'json',
    cache:      false,
    beforeSend: beforeGenericPostForm,
    success :   FormResponse,
    error:      genericError
});

$('#formSubmitId').click(function(e){
    e.preventDefault();

    //perform some custom simple form validation - return false if problem

    $('#formId').submit();
});

所以genericError被调用并给我上面的错误消息。

我可以 console.log 直到 beforeSend: beforeGenericPostForm, function 结束,然后它死/中止。

这是我多年来一直在寻找的东西,但找不到解决办法。

我的表单是标准 HTML 表单,我发布 application/x-www-form-urlencoded 并从服务器接收带有标题 application/json 的 JSON;字符集=utf-8

有没有人有任何线索或类似的问题?

或者这只是下面发布的一个标准错误,如果是这样,你如何解决它?

http://bugs.jquery.com/ticket/9352

如果您有任何建议,非常感谢,因为这个原因,从一年的发展到现在。

4

5 回答 5

1

我曾经遇到过类似的问题,到目前为止我发现的是 Internet Explorer 中的超时问题,在我的代码中,我将以下处理程序定义为空

xdr.onprogress = function () { };
xdr.ontimeout = function () { };
xdr.onerror = function () { }; 

并将发送函数包装在超时声明中

setTimeout(function () {
     xdr.send();
 }, 0);

这解决了我的问题。希望这可以帮助

于 2019-07-11T12:20:37.270 回答
0

我遇到了同样的问题,IE 8 和 11 工作正常,但 IE 9 和 10 却不行。我还在 IE 10 及以下版本中使用 xdomain 请求,因为它在早期浏览器中存在跨域 ajax 请求问题,

我找到了这个:

http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/

if ($.browser.msie && window.XDomainRequest) {
// Use Microsoft XDR
var xdr = new XDomainRequest();
xdr.open("get", "someurl");
xdr.onload = function () {
var JSON = $.parseJSON(xdr.responseText);
if (JSON == null || typeof (JSON) == 'undefined')
{
    JSON = $.parseJSON(data.firstChild.textContent);
}
processData(JSON);
};
xdr.onprogress = function(){ };
xdr.ontimeout = function(){ };
xdr.onerror = function () { };
setTimeout(function(){
    xdr.send();
}, 0);
}

然后做一个 else 并用 jQuery 做最新的、体面的浏览器。

于 2016-06-27T09:00:40.150 回答
-1

调用 ajax 时尝试使用 'type' 参数。

$('#formId').ajaxForm( {
    type :  'POST',
    dataType :  'json',
    cache:      false,
    beforeSend: beforeGenericPostForm,
    success :   FormResponse,
    error:      genericError
});
于 2019-05-07T15:08:57.097 回答
-1

你不是一个人。最近我在 IE11 中遇到了类似的问题。我的场景是这样的,有两个来自 Web 表单的 ajax 调用,一个在页面的一部分中填充数据,而另一个是 html5 视频标签,其 src 属性指向同一个域。这两个请求都显示为待处理。他们似乎都被锁定了。(可能是彼此?)现在,当用户在页面上执行触发另一个 ajax 调用的操作时,例如,导航离开页面,页面冻结。为了解决这个问题,在视频标签上引入了“自动播放”(这似乎是免费的,并有助于完成早期的 ajax 请求),然后页面表现正常。其他浏览器(chrome/firefox)在没有这个自动播放黑客的情况下工作得很好。这有点令人困惑,因为还有其他页面具有相同的 ajax 调用集,但只有其中一个页面挂起。我无法弄清楚这些参数的完美组合才能发生这种情况。我也认为这与 jquery 无关,因为其他浏览器正在工作。

于 2017-07-25T05:32:55.057 回答
-4

尝试删除 KB2962872。它解决了我在 peoplesoft90/tools8.52 中的问题

于 2014-08-25T12:07:55.787 回答