[英]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.