Ajax XDomainRequest中止IE 9上的POST

Ajax XDomainRequest中止IE 9上的POST,ajax,internet-explorer-9,cross-domain,xdomainrequest,Ajax,Internet Explorer 9,Cross Domain,Xdomainrequest,我正在做一个跨域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

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

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

您可以看到显示(中止)的错误消息。

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

如何克服这个问题

请帮忙


提前感谢

我不确定这是否是同一个问题,但就我而言,所有这些都需要设置:onerror;进步;及时;并加载。以下是一些讨论该问题的参考资料:

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

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

一条可能不相关的信息:在我的例子中,我决定将每个处理程序绑定到“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");
        }
    });
}

你找到解决办法了吗?我也有同样的问题。@JochemGruter您是否在任何循环中使用调用ajax请求意味着在任何循环中您是否调用ajax调用?????