一尘不染

XDomainRequest中止IE 9上的POST

ajax

我正在进行跨域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中有时会显示类似(异常终止)的错误。

为了克服此错误,我在Google中进行了搜索,但未找到任何好的解决方案。

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

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

如何克服这个问题?

请帮忙

提前致谢


阅读 207

收藏
2020-07-26

共1个答案

一尘不染

我不确定这是同一个问题,但就我而言,所有这些都需要设置:onerror; 进行中 超时 和加载。这里是一些讨论该问题的参考:

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

我看到的行为通过为每个事件处理函数添加非空白主体而消失了。我不确定是否全部必要。该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");
        }
    });
}
2020-07-26