【问题标题】:Internet explorer (only) aborts AJAX posts intermittentlyInternet Explorer(仅限)间歇性中止 AJAX 帖子
【发布时间】:2013-07-22 13:19:06
【问题描述】:

把我的头发拔了一个多星期。

使用:

jQuery 1.9.1

malsup 表单插件使用类似于 JSON 的例子: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 毫秒

Initiator (Pending) 字面意思是 (Pending)

打开请求的捕获:

请求标头为空

请求正文为空

一切都是空的

然而在“计时”标签下,我注意到它按顺序显示 等待 开始 开始 差距 DOMContentLoaded(事件) 加载(事件)

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

我会说,成功的 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

非常感谢您有任何建议,由于这个原因,从发布到现在保持了多年的发展。

【问题讨论】:

  • 在您的 POST 中间是否有任何形式的导航?如果您在 Fiddler 中观看,POST 是否会遇到问题?
  • 网络上什么都没有。我正在开发工具网络中观看?
  • 好吧,对于任何感兴趣的人,我使用标准 jquery ajax 发布测试回纯 jquery1.9.1,但在 IE10 中仍然出现相同的错误。因此,为了解决这个问题,考虑到请求永远不会离开浏览器,我只需将请求重新发布最多 3 次,然后再显示一条重试消息,它似乎就像一个魅力,最终用户永远不知道它正在发生,一切都很好,这是一个hack,但这对任何人来说都不是开销(除了损坏的 IE :)
  • 有趣,甚至可能更糟糕的是,我在图像方面遇到了同样的问题。更烦人 - 一些得到“(中止)”结果的实际上正在显示
  • 我们很高兴地报告重试破解(有些人会认为重试解决方案)仍然有效。

标签: jquery ajax internet-explorer xmlhttprequest abort


【解决方案1】:

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

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

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

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

这解决了我的问题。希望这会有所帮助

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,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 做最新的,体面的浏览器。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

          • 是的,除此之外,它只能帮助一台计算机查看该页面。您无法删除每台查看该网站的计算机上的安全修复程序。
          猜你喜欢
          • 2013-04-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-25
          • 1970-01-01
          • 2012-12-13
          相关资源
          最近更新 更多