XDomainRequest中止POST上IE 9(XDomainRequest aborts PO

2019-08-19 05:39发布

我做跨域Ajax调用。

我的代码:

if (window.XDomainRequest) // Check whether the browser supports XDR.
{
    xdr = new XDomainRequest(); // Create a new XDR object.
    if (xdr) {
        xdr.timeout = 3000;//Set the timeout time to  3 second.
        xdr.onload = function () {
            alert("Success");
        };
        xdr.onerror = function () {
            alert("Error");
        };
        xdr.ontimeout = function () {
            alert("Error");
        };
        xdr.open("post", urlSearch);
        xdr.send();
    }
}
else {
    $.ajax({
        url: urlSearch,
        type: 'POST',
        dataType: 'json',
        timeout: 3000,
        success: function (data) {
            alert("Success");
        },
        error: function () {
            alert("Error");
        }
    });
}

上述代码在所有的浏览器细,但在IE有时它显示像(中止)的误差。

为了克服这个错误我在谷歌搜索,并没有发现什么好的解决办法。

你可以看到(中止)显示错误消息。 http://postimg.org/image/k01u6t9v5/

当我做单个呼叫到一个特定的网址,却没有显示任何(中止)消息(显示出成功的警报)。 但是,当我做多个呼叫(如图像),其显示出错误的类型。

如何解决这个问题?

请帮忙

提前致谢

Answer 1:

我不知道这是同样的问题,但在我的情况下,所有的这些需要设置:onerror的; onprogress; ontimeout; 和onload事件。 这里有一些参考的是讨论这个问题:

  • http://social.msdn.microsoft.com/Forums/ie/en-US/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-处理程序,不指定
  • http://cypressnorth.com/programming/internet-explorer-aborting-ajax-requests-fixed/
  • http://rudovsky.blogspot.com/2012/09/microsoft-shit-xdomainrequest.html
  • https://github.com/faye/faye/pull/98

还有一些其他的方面。 他们分散,有时在他们的建议解决矛盾。 例如,一个暗示包裹在一个的setTimeout的xdr.send电话。

我看到的行为走了通过添加非空的机构为每个事件处理函数。 我不知道如果所有都是必要的。 该setTimeout的包装肯定是没有必要的。

一个可能无关紧要一块信息:在我的情况,我决定每个处理程序绑定到“这个”对象。 我还添加了功能的实现,以保持我的编译器从它们全部分配到同一个空函数。 我的代码使用GET,POST没有。 因人而异。

你的代码留下一个处理程序取消设置:

if (window.XDomainRequest) // Check whether the browser supports XDR.
{
    xdr = new XDomainRequest(); // Create a new XDR object.
    if (xdr) {
        xdr.timeout = 3000;//Set the timeout time to  3 second.
        xdr.onload = function () {
            alert("Success");
        };
        xdr.onerror = function () {
            alert("Error");
        };
        xdr.ontimeout = function () {
            alert("Error");
        };
        // this also needs to be set
        xdr.onprogress = function() {
            window.console.log('progress');
        };
        xdr.open("post", urlSearch);
        xdr.send();
    }
}
else {
    $.ajax({
        url: urlSearch,
        type: 'POST',
        dataType: 'json',
        timeout: 3000,
        success: function (data) {
            alert("Success");
        },
        error: function () {
            alert("Error");
        }
    });
}


文章来源: XDomainRequest aborts POST on IE 9