我有一個ajax調用,作爲一個函數的一部分執行,同時也將用戶重定向到另一個頁面。由於此代碼在其他用戶的網站上執行,因此我不想使用preventDefault()
,因爲這可能會影響用戶體驗,並且在我嘗試過之前一直是導致大量問題的原因。如果通話失敗了一小段時間,這並不是什麼大不了的事情,但我的經驗表明,在所有瀏覽器中,它的表現都非常穩定。Safari和Firefox上的ajax調用失敗,但沒有任何錯誤,但在Chrome上工作
AJAX調用看起來像下面
$.ajax({
type: 'GET',
url: 'URL',
dataType: 'json',
success: function(data) {
// stuff
},
error: function(jqXHR, textStatus, errorThrown) {
console.log("AJAX call failed. Status - " + textStatus);
console.log("Reason - " + errorThrown);
}
});
但對於一個特定的網站,我看到了一些非常奇怪的行爲。它在Chrome中按預期執行。但是我在Safari和Firefox的控制檯中看到以下內容。
AJAX call failed. Status - error.
Reason -
的jqXHR對象上的readyState
和status
性質均爲0
URL不指向另一個域,所以我敢肯定,它不是因爲跨來源的政策。
對其他類似的StackOverflow問題進行一些研究,如this one和this one,似乎瀏覽器在ajax調用完成之前重定向。
我很好奇以下的事情。
- 爲什麼我只能在Safari和Firefox上看到這種行爲? Chrome是否更好地記住異步請求並確保它不會丟棄未決的回調?
- 無需使用
preventDefault
就可以修復嗎?