5

ページ上でJQueryを使用して行われたすべてのajaxリクエストを監視し、各リクエストの結果でコールバック関数を呼び出す方法はありますか?

たとえば、ajaxリクエストを行います:

$.get('foo', {foo: bar} );
$.get('bar', {bar: foo} );

そして、これらのajaxリクエストのいずれかが完了するたびに、参照されたURLとリクエストの結果を使用して、呼び出される関数がありますか?

4

3 に答える 3

6

jQueryの「ajaxComplete」をチェックしてください。それはまさにあなたが探しているものでなければなりません:

http://api.jquery.com/ajaxComplete/

これを使用すると、ハンドラーを登録でき、そのハンドラーはすべてのajax呼び出しで呼び出されます。

$.ajaxComplete(function() {
    alert('it worked');
});

$.get('foo', {foo: bar} ); // "it worked" would get alerted when this completes

戻ってきた応答を確認するには、次のように、提供されるXHRオブジェクトを使用します。

$.ajaxComplete(function(e, xhr) {
    alert('it worked, and the response was:' + xhr.responseHTML);
});

$.get('foo', {foo: bar} );

また、URLを確認するには、提供される3番目の「設定」引数を使用できます。

$.ajaxComplete(function(e, xhr, settings) {
    alert('it worked, and the response was:' + xhr.responseHTML);
    alert('and the original URL was:' + settings.url);
});

$.get('foo', {foo: bar} );

編集

Yusuf K.がコメントで有益に指摘したように、jQuery 3などの新しいバージョンのjQueryのいずれかを使用している場合は、状況が変わりました。ajaxCompleteは静的メソッドではなく、代わりに呼び出すインスタンスメソッドですdocument

$(document).ajaxComplete(function(e, xhr, settings) { // ...
于 2012-12-24T21:48:18.080 に答える
2

ドキュメントから直接取得した...urlを使用してリクエストにアクセスする例:ajaxComplete

http://api.jquery.com/ajaxComplete/

$('.log').ajaxComplete(function(e, xhr, settings) {
  if (settings.url == 'ajax/test.html') {
    $(this).text('Triggered ajaxComplete handler. The result is ' +
                     xhr.responseHTML);
  }
});

console.log()xhrsettingsオブジェクトをブラウザコンソールに送信すると、アクセスできるすべてのデータを表示できます。ajaxComplete

于 2012-12-24T22:32:14.697 に答える
1

You can store the requests in an array and use the chained callbacks if that's what you mean:

function callback( data ) {
  // do something with the request
}

var requests = [];
requests.push( $.get('foo', { foo: bar }) ); // add to array and run request
requests.push( $.get('bar', { bar: foo }) );

requests.forEach(function( request ) {
  request.done(function( data ) {
    callback( data );
  });
});
于 2012-12-24T21:48:13.623 に答える