簡體   English   中英

jQuery AJAX“總是”不是“總是”被調用

[英]jQuery AJAX `always` isn't “always” called

具體來說,當在done (或fail )處理程序中引發錯誤時, always不會調用always處理程序。

我已經像這樣“修復”了這個問題:

xhr.done(delayThrow(function(response) { /* .. do stuff .. */ }));

function delayThrow(fn) {
    return function() {
        try {
            fn.apply(this,arguments);
        } catch(e) {
            setTimeout(function() {
                throw e;
            },10);
        }
    };
}

這有效,並且(令我驚訝的是)調用堆棧保持不變*。 但這似乎是一個非常棘手的解決方案。 有沒有更好的方法,還是我要解決這個錯誤?

*我認為這是因為已經創建了異常對象,並且該異常對象只是在未考慮諸如setTimeout類的以后調用堆棧的情況下拋出的

所以,我的猜測是, always回調(確實)有點誤導,只有火災時,在請求期間發生了錯誤,而不是之后,它已經完成。

似乎deferred.then()會完成工作並在每種情況下都會被調用。 但是,這似乎只在jQuery 3+上有效,這就是為什么我不能發布SO示例(顯然限於版本2)的原因。

演示在這里: https : //jsfiddle.net/78ux6jhL/

請注意, deferred.then() 3個回調參數,第一個參數在初始請求成功時,第二個參數在失敗時。 只是通過相同功能的兩次模擬actuallyAlways你想要的。

暫無
暫無

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

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