2012-03-15 9 views
1

サーバーへのajaxコールが多数あるアプリケーションがあります。毎回関数を呼び出し、AJAXリクエストが処理され、サーバーから返されます。

これで、サーバーからの応答を監査したいと思います(この要件は、ajaxコードの作成後に表示されます)。

私は応答データを監査する機能を持っていますが、今問題になっているデータをどのようにして別の場所に送ることができますか?

私は、各ajax呼び出しで関数を呼び出すためのコード行を追加するという面倒な作業をしたくありません。

より簡単で一般的な方法がありますか。どういうわけか、私は応答が戻ってきたときにそれを検出し、応答を処理することができました。

従来のjavascriptメソッドとjquery ajaxの両方を使用してシステムで呼び出します。 (このアプリは長い時間から変更されており、新しいものが追加されて古いものは決して削除されないように多くの手が変更されています)

+0

http://api.jquery.com/extending-ajax/、http://api.jquery.com/ajaxComplete/、http://api.jquery.com/extending-ajax/ – Stefan

+0

可能な複製[Jquery、すべてのajax呼び出しのための関数を独立して登録する](http://stackoverflow.com/questions/3901871/jquery-register-a-function-for-every-ajax-call-independently) –

+0

私はあなたのコードの腐敗に同情する状況。開発者として、私たちは他の開発者の乱雑なコードで作業する必要がありますが、私たちが過去の開発者であることも忘れてしまいます。私はこのコードをきれいにすることを忙しくしていますが、お勧めします!私はコードを修正するためにはるかに短い時間を要し、この混乱を別のあいまいな、キャッチオールの修正で維持します。 – natedavisolds

答えて

0

.ajaxComplete()を使用すると、AJAXのすべての要求に対してonCompleteイベントjQueryを通して。あなたが求めていることはそうではありませんか?

$('.ajaxRequest').click(function(event) { 
    event.preventDefault(); 
    $.getJSON(
     '/echo/json/', 
     this.id, 
     function(data, textStatus, jqXHR) { 
      console.log(data, textStatus, jqXHR); 
     } 
    ); 
}); 

// Listen to all ajax requests 
$("#log").ajaxComplete(function(event, request, settings) { 
    console.log(event, request, settings); 
});​ 

ビューdemo

+0

これはajaxを呼び出す従来の 'javascript'の方法で動作します。 –

+0

いいえ、 'XMLHttpRequest'は私が気づいているイベントをトリガーしません。 – Stefan

1

ヘルパー関数を使用してajax呼び出しをラップし、コード全体で使用します。

アン(未テスト)例:

MyApp = MyApp || { 
    logRequest: function _logRequest(settings, response) { 
     // Log your response 
    }, 

    ajax: function _ajax (settings) { 
     var that = this; 

     // Log attempt request here?  

     // Example of logging the success callback (do similar for error or complete) 
     if (settings.success) { 
      // A success handler is already specified 
      settings.success = function (data) { 
       that.logRequest(settings, data); // Log the response 
       settings.success(data); // Call the original complete handler     
      }; 
     } else { 
      // No success handler is specified 
      settings.success = function (data) { 
       that.logRequest(settings, data); 
      }; 
     } 

     return jQuery.ajax(settings); 
    } 
}; 

私は決まり文句を減らしたいロット状況のため、このメカニズムを好みます。自分のMyAppオブジェクト(アプリケーションに適切な名前)の状態を変更するだけで済むので、他のグローバルオブジェクトを変更せずに関数呼び出しを傍受することができるインターフェイスの一種です。また、他の多くの状況でも参考になる可能性のある参照をどこでも更新することなく、この機能を他のものと簡単に交換することができます。

関連する問題