2011-02-01 13 views
0

私は、JavaScriptの機能を持っている:Ajaxクエリでは、成功クエリの共通関数は存在しますか?

function doWorkForJobCreate() { 
    $.ajax({ url: '<%:ConfigurationManager.AppSettings["SiteRoot"]%>/Job/JobCreate', 
     success: function (data, status, req) { 
      if (!processFKErrorHeader(req.getResponseHeader("fkerror"))) return; 
      $("#fktabsCreate").html(data); 

     } 
    }) 
} 

とエラー処理機能:

function processFKErrorHeader(fkerror){ 
    // alert to user 
    // refresh the page 
    } 

自動的にAjaxの問い合わせ大成功機能のために、この関数を呼び出す方法があるのだろうか?

このように、私はすべてのAjax成功関数にエラー・プロセッサーを挿入する必要はありません。

答えて

0

それは把握するいつかかかりますが、ここでのソリューションです:

jqueryの - 1.4.2.jsのソースに、「私のコード」を追加します。

function success() { 

if (!processFKErrorHeader(xhr.getResponseHeader("fkerror"))) //mycode 
    return; //mycode 

// If a local callback was specified, fire it and pass it the data 
if (s.success) { 
    s.success.call(callbackContext, data, status, xhr); 
} 

// Fire the global callback 
if (s.global) { 
    trigger("ajaxSuccess", [xhr, s]); 
} 

} 
1

すべての要素にブロードキャストされるajaxSuccess eventを探しています。例えば

$(document).ajaxSuccess(function(e, xhr, settings) { 
    ... 
}); 
1

あなたは.ajaxSuccessを使用して、グローバルな成功ハンドラを追加することができますが、あなたは他のものを実行して防ぐことはできません。

ハンドラは、Ajaxリクエストのセットアップに使用されたsettingsオブジェクトを取得します。 はたぶん、あなたは(テストしていない)がsuccessハンドラをオーバーライドすることができ

$(document).ajaxSuccess(function(e, xhr, settings) { 
    if (!processFKErrorHeader(req.getResponseHeader("fkerror"))) { 
     settings.success = function() {}; 
    } 
}); 

アップデート:ここ問題は、ハンドラが実行される保証は順序があるかどうか私にはわからないということです。

関連する問題