gpt4 book ai didi

ajax - XDomainRequest 中止 IE 9 上的 POST

转载 作者:行者123 更新时间:2023-12-04 17:36:55 30 4
gpt4 key购买 nike

我正在做一个跨域 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 中有时会显示类似 (aborted) 的错误。

为了克服这个错误,我在谷歌搜索并没有找到任何好的解决方案。

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

当我对特定 URL 进行单独调用时,它没有显示任何(中止)消息(显示成功警报)。但是当我进行多次调用(如图所示)时,它会显示出这种类型的错误。

如何克服这个问题?

请帮忙

提前致谢

最佳答案

我不确定这是同一个问题,但在我的情况下,所有这些都需要设置:onerror;进行中;超时;和加载。以下是一些讨论该问题的引用资料:

  • http://social.msdn.microsoft.com/Forums/ie/en-US/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-handlers-not-specified
  • 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

  • 还有很多其他的。它们在建议的解决方案中分散,有时甚至相互矛盾。例如,有人建议将 xdr.send 调用包装在 setTimeout 中。

    通过为每个事件处理函数添加非空白主体,我看到的行为消失了。我不确定是否所有都是必要的。 setTimeout 包装器绝对没有必要。

    一条可能不相关的信息:在我的例子中,我决定将每个处理程序绑定(bind)到“this”对象。我还添加了函数实现,以防止我的编译器将它们全部分配给同一个空函数。我的代码使用的是 GET,而不是 POST。 YMMV。

    您的代码未设置一个处理程序:
    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");
    }
    });
    }

    关于ajax - XDomainRequest 中止 IE 9 上的 POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15786966/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com