2012-03-27 6 views
2

私は通常の成功ハンドラを防ぐ方法を見つけようとしています。ロードされたファイルの内容に応じて、割り当てられた成功ハンドラを防止します。

$.ajax({ 
    url: ... 
    success: function(response) { 
     if (response.success) { 
      // do success 
     } else { 
      // do fail, maybe login timeout 
     } 
    } 
}); 

これは簡単な方法です。オブジェクトはsuccess = true/falseと非常に単純です。

しかし、ステートメントがtrueの場合、成功ハンドラが起動されないようにする方法があります。他の人が発火する場合は、他のすべての成功ハンドラと確定する前にトリガする

$.ajax({ 
    url: ... 
    success: function(response) { 
     // do success 
    } 
}); 
$.ajaxFireBeforeAllOtherSuccessHandler(function(response) { 
    return response.success; 
}); 

して、この持つ$.ajaxFireBeforeAllOtherSuccessHandler(疑似名)。

私は401によって多分要求のstatusCodeを設定し、$.ajaxSetupを使用して、マスターコントロールを持つことができます知っている:

$.ajaxSetup({ 
    statusCode: { 
     401: function() { 
      // this do fail 
     } 
    } 
}); 

しかし、それは現時点では私のためにことはできません!ロードされたファイルの内容に応じて割り当てられた成功ハンドラを防止する方法はあり

$.ajax({ 
    url: ... 
    success: function() { checkAjax(arguments, function() { 
     // do success 
    }); } 
}); 
function checkAjax(a, c) { 
    return a[0].success && c.apply($, a); 
} 

:別だった

は、あなたがあなたのコールバックをラップチェック方法を持っているのですか?

がグローバルajaxSuccessハンドラas described hereを設定します。あなたは、通常の成功ハンドラを呼び出すかどうかを決定するグローバルな方法を探しているなら

答えて

3

私はjQuery.ajaxPrefilter

魔女は、元の成功ハンドラが発射される前に、あなたはすべてのAJAX呼び出しをキャプチャすることができました。そして、あなたはハンドラを上書きして、オリジナルを解雇する場合、テストを確認するために行うことができます:あなたの助け@jfriend00

ため

jQuery.ajaxPrefilter(function(opts) { 
    var _success = opts.success; // Copy original 
    opts.success = function(r) { // Overwrite original 

     var args = [].slice.call(arguments), // Convert arguments to a native array 
      isTrue = !(r.success === false); // Do my testing here 

     if (isTrue) { 
      _success.apply(this, args); // Fire original with the right context and arguments 
     } else { 
      // Do my alert thing in here 
     } 
    }; 
}); 

感謝を

2

、その後、私はあなたがこのような何かを行うことができると思います。次に、mySuccess: fnという名前のajax設定オブジェクトに独自のプロパティを作成し、通常の​​の代わりに成功ハンドラを配置して、jQueryが自動的に呼び出さないようにします。次に、ajaxSuccessハンドラで、xhrオブジェクトを調べて、success関数の呼び出しを続行するかどうかを決定できます。そうした場合、設定オブジェクトを調べてmySuccessハンドラを取得して呼び出すことができます。

少し複雑な方法では、通常の成功ハンドラに設定するユーティリティ関数を定義することができます。その成功ハンドラでは、レスポンスの値をチェックし、探していたものであれば、設定オブジェクトのmySuccess関数を呼び出すことができます。

関連する問題