2013-08-27 75 views
2

我已經創建,增加了一個默認的錯誤處理程序,我的Ajax調用的便捷方法:如何重寫jQuery的承諾回調

function myAjaxFunction(url, data) { 

    return $.ajax({ 
     url: url, 
     data: data 

    }).fail(myErrorHandler); 

} 

到目前爲止,這個偉大的工程,因爲現在我沒有指定錯誤處理函數在50個不同的地方。

但有時我需要重寫默認錯誤處理程序與自定義之一。當我這樣做,但是,它調用錯誤處理:

myAjaxFunction("myurl", "mydata").fail(myCustomErrorHandler).then(doSomething); 

我如何得到它覆蓋或從鏈刪除以前的錯誤處理程序?

回答

6

如何從鏈中刪除以前的錯誤處理程序?

你不行。

或覆蓋它?

你可以撤消它做了什麼(覆蓋它的效果)。但是,您最好避免添加常規處理程序 - 要做到這一點,您必須更改便捷方法。我推薦一個自定義處理程序作爲可選參數:

function myAjaxFunction(url, data, customHandler) { 
    return $.ajax({ 
     url: url, 
     data: data 

    }).fail(customHandler || myErrorHandler); 
} 
+0

不錯的建議與可選參數。 –

+2

這是正確的,但不令人滿意。這意味着用戶必須跨越舊的基於回調的API和新的基於Promises的API。 –