1

ページには十数個の ajax 呼び出しがあり、すべて目的が異なります。ページ上の任意の ajax 呼び出しの応答をキャッチできる関数を作成できるかどうかを知りたかったのです。応答が "Catch me" というテキストの場合、関数はデフォルトの ajax 成功関数を防ぎ、"Caught" を警告します。そうでない場合は、デフォルトの成功関数に従います。

基本的に、ページ上のすべての ajax 呼び出しをキャッチし、応答テキストをチェックする関数を作成できますか。

各 ajax 呼び出しを編集するのは退屈な方法ですが、私はそれを避けようとしています。

4

2 に答える 2

1

成功イベントの直前に、応答で実行されるグローバルハンドラーを作成しようとしているようです。次に、ある条件に基づいて、デフォルトの動作を破る(ケースにアラートを表示する)か、フローをさらに渡します(ajax呼び出しごとに異なるロジックを使用して成功時に実行できるため、カスタム成功イベントに渡します)。

これを行うには、jQueryによって提供されるajaxハンドラーを少し変更する必要があります。

var ns = {};
(function(ctx) {
    ctx.ajax = function(options, callback){
        var defaults = {
            success: function (data) {
                if (data != "Catch me") {
                    callback(data);
                } else {
                    alert("Catched");
                }
            }
        };
        $.extend(options, defaults);
        $.ajax(options);
    };   
})(ns);

ajax呼び出しは、次のように呼び出す必要があります。

ns.ajax(options, function (data) {
    alert("success, inside callback");
});
于 2012-11-25T15:58:50.830 に答える
1

jQueryのグローバル AJAX イベント ハンドラーを確認してください。ページには次のように記載されています。

これらのメソッドは、ページ上の任意の AJAX 要求に対して初期化や完了などの特定のイベントが発生したときに呼び出されるハンドラーを登録します。jQuery.ajaxSetup() のグローバル プロパティが true の場合、グローバル イベントは各 AJAX リクエストで発生します。これはデフォルトです。注: global の値に関係なく、クロスドメイン スクリプトまたは JSONP リクエストに対してグローバル イベントが発生することはありません。

したがって、コードは次のようになります (ランダム セレクターを使用しました。"body" を使用する必要はありません)。

$("body").ajaxComplete(function(e, xhr, settings){ alert(xhr.responseText); });​​​​​​​
于 2012-11-25T15:11:39.747 に答える