8

コースから外れているかもしれませんが、JQueryプレフィルター機能を使用して、Ajax Successの応答データを分析し、返されたJSONの特定の要素の存在に基づいてerror、呼び出しでイベントハンドラーに条件付きで転送できるかどうか疑問に思いました。 ajax(エラーメッセージ)。

これがページ内の任意のajax関数に対してグローバルに設定されていると便利です。

たぶん、これはこれを行うための最良の方法ではありません。誰かが別のアイデアを持っているなら、私に知らせてください!

プレフィルター:

//only run prefilter on ajax calls expecting JSON back in response, would this 
//be the right way to do this? 
$.ajaxPrefilter( "json", function( options, originalOptions, jqXHR ) {
    jqXHR.success(function(data, textStatus, jXHR) {
        if( hasErrors(data) ) {
           //forward to error event handler?
        }
    });
});

Ajax呼び出し:

$.ajax({
      type:     "POST",
      data:     {  
                    theData: "someData"                    
                },
      url:      theUrl,
      dataType: 'json',
      cache:    false,          
      success:  function (data, textStatus, jqXHR) {
                    //do stuff on success
                }
      error:    function ( jqXHR, textStatus, errorThrown ) {
                    //I want to do this stuff if data contains errors from server
                } 
 });

どうもありがとう!

4

1 に答える 1

16

方法は次のとおりです。元の成功関数(各リクエストに固有)を保存してから、別のコールバックをアタッチします。エラーがなかった場合は、元のコールバックを呼び出します。

$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
    var originalSuccess = options.success;

    options.success = function (data) {
        if(hasErrors(data)) {
           //forward to error event handler or redirect to login page for example
        }
        else {
            if (originalSuccess != null) {
                originalSuccess(data);
            }
        }   
    };
});
于 2011-06-16T14:57:23.437 に答える