web-dev-qa-db-ja.com

jquery ajaxのasync:falseとasync:trueの違いは何ですか?

Jquery ajaxにはパラメータがあります

$.ajax({async: true, ...});

値をtruefalseに設定することの違いは何ですか?

38
Brutal_JL

Ajaxリクエストが必要な場合、asyncfalseに設定しますブラウザが他のコードに渡される前に完了しました:

<script>
    // ...
    $.ajax(... async: false ...); // Hey browser! first complete this request, 
                                  // then go for other codes

    $.ajax(...); // Executed after the completion of the previous async:false request.
</script>

By default, the $。ajaxrequest in jQuery is set to asynchronous。変数名は非同期で、値はtrueに設定されます。これについて最初に学習したときも少し混乱しましたので、もう一度見ていきましょう。

同期(async:false)–スクリプトは停止し、サーバーが応答を返すのを待ってから続行します。同期Ajaxが必須である状況がいくつかあります。

標準のWebアプリケーションでは、顧客とサーバー間の対話は同期的です。これは、一方が他方の後に発生する必要があることを意味します。顧客がリンクをクリックすると、リクエストがサーバーに送信され、サーバーが結果を送り返します。

リクエストが失われ、ブラウザがハングする危険があるため、(onbefore)unloadイベントハンドラ以外には同期javascriptを使用しないことをお勧めしますが、ユーザーが移動できるようにする前にサーバーからの応答が必要な場合ページから見ると、同期Javascriptは単なる最良の選択肢ではありません。

$.ajax({
         url: "file.php",
         type: "POST",
         async: false,
         success: function(data) {
                // .....
         }
      });

Asynchronous(async:true)–スクリプトがページの処理を続行できるようにし、到着した場合に応答を処理します。ファイルのリクエストや転送で何か問題が発生した場合でも、プログラムは問題を認識して回復することができます。訪問者はWebページとの対話を続けることができ、要求された情報はページが到着したときにページを更新して処理されるため、サーバーからの取得中の非同期処理は遅延を回避します。

$.ajax({
         url: "file.php",
         type: "POST",
         async: true,
         success: function(data) {
                    // .....
         }
       });

この記事もご覧ください

非同期および同期AJAX呼び出し

73

falseに設定すると、メインスレッド(JavaScriptの実行、画面のレンダリングなどを担当)がブロックされ、XHRが完了するまで待機します。

これはほとんど常にひどい考えです。ユーザーは、応答しないUIを好みません。

6
alex

async(デフォルト:true

タイプ:ブール

デフォルトでは、すべてのリクエストは非同期で送信されます(つまり、これはデフォルトでtrueに設定されます)。同期リクエストが必要な場合は、このオプションをfalseに設定します。クロスドメインリクエストと_dataType: "jsonp"_リクエストは同期操作をサポートしていません。同期リクエストは一時的にブラウザをロックし、リクエストがアクティブな間はアクションを無効にすることに注意してください。 jQuery 1.8以降、jqXHR(_async: false_)での_$.Deferred_の使用は非推奨です。 jqXHR.done()などのjqXHRオブジェクトの対応するメソッドの代わりに、成功/エラー/完了コールバックオプションを使用する必要があります。

ソース です。

1
Sabir Al Fateh