[解決済み] jQuery の Ajax リクエストがすべて終了するまで待ちますか?
2022-03-14 13:31:02
質問
jQuery Ajaxリクエストがすべて別の関数内で完了するまで、ある関数を待機させるにはどうすればよいですか?
要するに、すべてのAjaxリクエストが完了するのを待ってから、次の実行をする必要があるのです。でも、どうやって?
解決方法は?
jQueryは現在 機能 を使用します。
これは引数として任意の数のDeferredオブジェクトを受け取り、それらが全て解決された時に関数を実行します。
つまり、(例えば)4つのajaxリクエストを開始し、それらが終了したらアクションを実行したい場合、以下のようにすることが可能です。
$.when(ajax1(), ajax2(), ajax3(), ajax4()).done(function(a1, a2, a3, a4){
// the code here will be executed when all four ajax requests resolve.
// a1, a2, a3 and a4 are lists of length 3 containing the response text,
// status, and jqXHR object for each of the four ajax calls respectively.
});
function ajax1() {
// NOTE: This function must return the value
// from calling the $.ajax() method.
return $.ajax({
url: "someUrl",
dataType: "json",
data: yourJsonData,
...
});
}
私見ですが、この方法だと構文がすっきりしており、ajaxStartやajaxStopのようなグローバル変数が含まれないので、ページの開発中に好ましくない副作用が発生する可能性があります。
もし、いくつのajax引数を待つ必要があるか事前に分からない場合(つまり、可変数の引数を使用したい場合)、それでも可能ですが、ほんの少しトリッキーになります。参照 Deferredsの配列を$.when()に渡す。 (そして多分 jQuery .whenの引数数可変のトラブルシューティング ).
ajax スクリプトの失敗モードなどをより深く制御する必要がある場合は、以下の方法で返されたオブジェクトを保存します。
.when()
- これはjQueryの
約束
オブジェクトは、オリジナルのすべてのajaxクエリを包含しています。を呼び出すことができます。
.then()
または
.fail()
を追加し、詳細な成功/失敗のハンドラを追加します。
関連
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み] .prop() vs .attr()
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み] jQueryを使ったAjaxリクエストの中断
-
[解決済み] 動的に生成された要素にイベントバインディングを行うか?
-
[解決済み] jQuery Ajax ファイルアップロード
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
Vueがechartsのtooltipにクリックイベントを追加するケーススタディ
-
vueのグローバルがscss(mixin)を導入。
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
Vueのクラススタイルの使い方の詳細
-
[解決済み】リソースの読み込みに失敗した:Bind関数でサーバーが500(Internal Server Error)のステータスで応答した【非公開
-
[解決済み】TypeErrorの解決方法。未定義またはヌルをオブジェクトに変換できない
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
フロントエンド非同期(アシンク)ソリューション(全ソリューション)
-
jq は html ページとデータを動的に分割する。