jQuery.ajax()でエラーだったら画面で通知したいけど、一部の通信については正常系で失敗するパターンがある(ログイン情報が401で未ログインと判断とか)ので、そのときは普通のエラー処理したくない。そんなとき。
// 初期の失敗時コールバックを登録
var handled = false;
p.fail(function() {
// 失敗時制御済みでなければコールバック実行
if (!handled) {
return onfail.apply(this, arguments);
}
});
// 失敗時コールバック登録処理を上書き、
// 一度でも呼び出しがあれば制御フラグをonにする
var _org_fail = p.fail;
p.fail = function(callback) {
handled = true;
// 処理を戻し、正規の登録処理も行う
p.fail = _org_fail;
return p.fail(callback);
};
デモ:
うーんなんかこんなやり方になる設計がダサい気もしないでもない。