ページ上でJQueryを使用して行われたすべてのajaxリクエストを監視し、各リクエストの結果でコールバック関数を呼び出す方法はありますか?
たとえば、ajaxリクエストを行います:
$.get('foo', {foo: bar} );
$.get('bar', {bar: foo} );
そして、これらのajaxリクエストのいずれかが完了するたびに、参照されたURLとリクエストの結果を使用して、呼び出される関数がありますか?
ページ上でJQueryを使用して行われたすべてのajaxリクエストを監視し、各リクエストの結果でコールバック関数を呼び出す方法はありますか?
たとえば、ajaxリクエストを行います:
$.get('foo', {foo: bar} );
$.get('bar', {bar: foo} );
そして、これらのajaxリクエストのいずれかが完了するたびに、参照されたURLとリクエストの結果を使用して、呼び出される関数がありますか?
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) { // ...
ドキュメントから直接取得した...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()xhr
とsettings
オブジェクトをブラウザコンソールに送信すると、アクセスできるすべてのデータを表示できます。ajaxComplete
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 );
});
});