[解決済み] 複数のajax呼び出しに対するjQueryコールバック
2022-05-13 07:54:42
質問
クリックイベントで3つのajaxを呼び出したいのです。各Ajaxコールは個別の操作を行い、最終的なコールバックに必要なデータを返します。呼び出し自体は互いに依存しないので、すべて同時に行うことができますが、私は3つすべてが完了したときに最終的なコールバックを持つことを望みます。
$('#button').click(function() {
fun1();
fun2();
fun3();
//now do something else when the requests have done their 'success' callbacks.
});
var fun1= (function() {
$.ajax({/*code*/});
});
var fun2 = (function() {
$.ajax({/*code*/});
});
var fun3 = (function() {
$.ajax({/*code*/});
});
どのように解決するのですか?
ここに私が書いたコールバックオブジェクトがあります。このオブジェクトでは、1つのコールバックを設定して、すべてが完了したらそれを起動するか、または各コールバックを設定して、すべてが完了したらそれらをすべて起動することができます。
注意
jQuery 1.5+以降では、別の回答で説明されているように、遅延メソッドを使用することができます。
$.when($.ajax(), [...]).then(function(results){},[...]);
jQuery < 1.5では、次のように動作します。また、2つのボタンでここに示すように、未知の時間にajaxコールを発生させる必要がある場合。 両方のボタンがクリックされた後に実行される
[使い方]
の場合 シングル コールバックが完了したら 動作例
// initialize here
var requestCallback = new MyRequestsCompleted({
numRequest: 3,
singleCallback: function(){
alert( "I'm the callback");
}
});
//usage in request
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.requestComplete(true);
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.requestComplete(true);
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.requestComplete(true);
}
});
それぞれ があります。 コールバックを持ちます。 動作例
//initialize
var requestCallback = new MyRequestsCompleted({
numRequest: 3
});
//usage in request
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.addCallbackToQueue(true, function() {
alert('Im the first callback');
});
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.addCallbackToQueue(true, function() {
alert('Im the second callback');
});
}
});
$.ajax({
url: '/echo/html/',
success: function(data) {
requestCallback.addCallbackToQueue(true, function() {
alert('Im the third callback');
});
}
});
[コード]
var MyRequestsCompleted = (function() {
var numRequestToComplete, requestsCompleted, callBacks, singleCallBack;
return function(options) {
if (!options) options = {};
numRequestToComplete = options.numRequest || 0;
requestsCompleted = options.requestsCompleted || 0;
callBacks = [];
var fireCallbacks = function() {
alert("we're all complete");
for (var i = 0; i < callBacks.length; i++) callBacks[i]();
};
if (options.singleCallback) callBacks.push(options.singleCallback);
this.addCallbackToQueue = function(isComplete, callback) {
if (isComplete) requestsCompleted++;
if (callback) callBacks.push(callback);
if (requestsCompleted == numRequestToComplete) fireCallbacks();
};
this.requestComplete = function(isComplete) {
if (isComplete) requestsCompleted++;
if (requestsCompleted == numRequestToComplete) fireCallbacks();
};
this.setCallback = function(callback) {
callBacks.push(callBack);
};
};
})();
関連
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] jQueryで複数のクラスを持つ要素を選択するにはどうすればよいですか?
-
[解決済み] jQueryを使ったAjaxリクエストの中断
-
[解決済み] コールバック内で正しい `this` にアクセスする方法
-
[解決済み] jQuery Ajax呼び出し後のリダイレクトリクエストを管理する方法
-
[解決済み] jQueryでval()がchange()をトリガーしない
-
[解決済み] jQuery .onとhoverの使い分けは可能ですか?
-
[解決済み】jQueryでチェックボックスがチェックされているかどうかを確認するにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jQuery UIダイアログのクローズボタンを削除するには?
-
[解決済み] jQuery の Ajax リクエストがすべて終了するまで待ちますか?
-
[解決済み] 複数のクラスを削除する(jQuery)
-
[解決済み] jQuery UI DatePicker - 日付フォーマットの変更
-
[解決済み] Twitter Bootstrapのモーダルウィンドウを閉じないようにする
-
[解決済み] jQueryの複数要素の同一クリックイベント
-
[解決済み] ドロップダウンのアイテムの選択値をjQueryで取得する
-
[解決済み] セレクトボックスの選択項目を設定する
-
[解決済み] jQueryでval()がchange()をトリガーしない
-
[解決済み] jQueryで選択されたオプションのインデックスを取得する