簡體   English   中英

XDomainRequest在IE 9上中止POST

[英]XDomainRequest aborts POST on IE 9

我正在進行跨域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/

當我對特定URL進行單獨調用時,它不會顯示任何(已中止)消息(顯示成功警報)。 但是當我做多次調用時(比如在圖像中)它顯示出那種類型的錯誤。

如何克服這個問題?

請幫忙

提前致謝

我不確定這是同一個問題,但在我的情況下,所有這些都需要設置:onerror; onprogress; ontimeout; 和onload。 以下是一些討論問題的參考資料:

還有很多其他的。 它們在建議的解決方案中是分散的,有時是矛盾的。 例如,建議在setTimeout中包裝xdr.send調用。

我看到的行為通過為每個事件處理函數添加非空白主體而消失了。 我不確定是否有必要。 絕對沒有必要使用setTimeout包裝器。

一個可能不相關的信息:在我的情況下,我決定將每個處理程序綁定到'this'對象。 我還添加了函數實現,以防止我的編譯器將它們全部分配給相同的空函數。 我的代碼使用的是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");
        }
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM