ホームページ  >  記事  >  ウェブフロントエンド  >  Ajax リクエストはデフォルトで非同期リクエストですか?

Ajax リクエストはデフォルトで非同期リクエストですか?

WBOY
WBOYオリジナル
2022-07-01 16:59:493353ブラウズ

ajax のデフォルトは非同期リクエストです。ajax では、さまざまな async 値に基づいて非同期リクエストであるかどうかを判断できます。async の値が false の場合、ajax リクエストは同期であることを意味します。 async の値が true である場合、これは Ajax リクエストが非同期であることを意味します。デフォルトでは、async の値は「true」であるため、ajax リクエストはデフォルトで非同期になります。

Ajax リクエストはデフォルトで非同期リクエストですか?

#この記事の動作環境: Windows10 システム、javascript1.8.5&&html5 バージョン、Dell G3 コンピューター。

ajax はデフォルトで非同期ですか?

ajax はデフォルトで非同期に送信されます;

AJAX は、 「true」ですが、async 値はデフォルトで true (非同期送信) です。この利点は、部分的な更新によってユーザー エクスペリエンスを向上させると同時に、リソースを節約し、データベースへの負荷を軽減できることです。

ajax はデフォルトでは非同期リクエスト (async:true) ですが、パラメーター asycn:false

$.ajax({
                                        url: 'www.test.com/test/test',
                                        type: 'POST',
                                        data: {name:"test"}
                                        async: false,
                                        error: function() {
                                            console.log('error');
                                        },
                                        success: function(resp) {
                                            console.log('success');
                                        }
                                    });

を設定することで同期リクエストにできます。注: この種の操作がある場合は。 ajax; を呼び出す前に flag = false と書きましたが、ajax の success コールバックで flag = true を設定するような操作は、ajax の非同期状態では望ましい結果を得ることができません。

ajax はデフォルトで非同期であるため、後続の操作が完了した後でコールバック flag = true 操作を実行することができます。 !

拡張知識:

AJAX は同期リクエストをどのように実装しますか?

Ajax リクエストは同期リクエストと非同期リクエストに分かれていますが、デフォルトでは非同期リクエストになっているため、ajax を使って同期リクエストを行いたい場合、この同期リクエストをどのように実装すればよいでしょうか。 ?毛織物?次の記事では、ajax 同期リクエストの実装について紹介しますので、困っている方は参考にしていただければ幸いです。

まず、同期は単一スレッドであり、コードは順番に実行されることを知っておく必要があります。js コードが現在の同期 ajax リクエストにロードされると、ページ上の他のすべてのコードのロードが停止します。ページは一時停止アニメーションの状態にあり、リクエストが完了するまで、他のリクエストが実行されます。

第二に、ajax は、async の値に応じて、同期と非同期の 2 つのリクエスト メソッドに分けられることを知っておく必要があります。async の値が true の場合、それは非同期リクエスト メソッドです。 async の値が false の場合、それは非同期リクエスト メソッドです。同期リクエスト メソッドなので、ajax 同期リクエストを実装するには、async の値を false に設定するだけです。

$.ajax(
 
      type:“POST”/“GET”
 
      url:"",
 
      data:{},
 
      dataType:"json",
 
      async:false,  //同步
 
     success:function(response){
 
           }     
 
   );

Ajax の同期リクエストと非同期リクエストの違いは何ですか?また、使用シナリオは何ですか?

理解 1:

AJAX は、async の値に応じて、同期 (async = false) と非同期 (async) の 2 つのタイプに分類されます。 = true) W3C チュートリアルでは非同期実行が推奨されています;

同期と非同期実行を区別しましょう:

非同期: 非同期モードでは、AJAX を使用してリクエストを送信すると、実行する必要があるコードです。現時点では、さまざまな理由によりサーバーがリクエストに応答していない可能性がありますが、非同期実行を使用しているため、AJAX リクエスト コードを含むすべての関数の残りのコードは引き続き実行されます。リクエストの結果を別の JS 関数に渡して処理すると、2 つのスレッドが同時に実行されているような状態になります。

同期: 同期モードでは、AJAX を使用してリクエストを送信した後も、実行する必要のあるコードがまだあります。また、サーバーの応答を処理のために別の JS 関数に渡しますが、コードの実行は今回は Yes: サーバーが応答しない場合、または応答結果を処理する JS 関数がリターン処理を行っていない場合、リクエスト コードを含む関数の残りのコードは実行できません。単一スレッドと同様に、リクエストが送信された後にブロック状態に入り、残りのコードはブロック状態になるまで実行を継続しません。

同期モードまたは非同期モードを選択するにはどうすればよいですか?この質問に答えるには、次の考えられる質問を通じて答えることができます:

AJAX リクエストを送信した後も、サーバーの応答結果の処理を続ける必要があります。非同期リクエスト モードを使用し、結果の処理は別の JS 関数によって処理されます。このとき、非同期リクエストに対する応答がまだ到着しておらず、関数が return ステートメントの実行を終了しているため、戻り結果が空の文字列になるという状況が発生する可能性があります。

理解 2:

同期: リクエストを送信し、戻りを待ってから次のリクエストを送信します。

非同期: リクエストを送信し、待たずに戻ってください。いつでも次のリクエストを送信できます。

同期により、デッドロックやダーティ データの読み取りを回避できます。通常、特定のリソースを共有するときに使用されます。全員が変更権限を持っていて、ファイルを変更する場合同時に、ある人が削除したコンテンツを他の人が読むことができ、エラーが発生し、同期が順番に変更されます。

非同期により効率が向上します。最近の CPU はデュアルコアまたはクアッドコアです。非同期処理すると、複数のタスクを同時に実行できます。もちろん、同時に処理できることを確認する必要があります。 。

同期と非同期の最大の違いは次のとおりです。一方は待つ必要がありますが、もう一方は待つ必要はありません。

たとえば、テキスト メッセージの送信は非同期の例です。開始側は受信側のステータスを気にしません。受信機からの返信情報を待つ必要がなく、次の送信を行うことができます。

電話は同期の一例です。発信者は受信者を待つ必要があり、通話が接続されるまで通信は開始されません。受信者からの返信情報を待つ必要がある

そして、私たちがよく議論する同期の問題は、主にマルチスレッド環境でのデータ共有の問題で発生します。つまり、複数のスレッドが同じリソースにアクセスする必要がある場合、特定の瞬間に 1 つのスレッドだけがリソースにアクセスできるようにするために、スレッドを特定の順序で配置する必要があります。非同期が使用される場合、プログラムの実行結果は次のようになります。予測不能になる。したがって、この場合はデータを同期する必要があります。つまり、1 つのプロセスのみがリソースにアクセスでき、他のスレッドは待機する必要があります。

同期を実現するメカニズムには、主にクリティカル セクション、ミューテックス、セマフォ、イベントが含まれます

クリティカル セクション: パブリック リソースにアクセスするか、高速で適切なコード部分データアクセスを制御します。共有リソースにアクセスできるスレッドは常に 1 つだけです。複数のスレッドがパブリック リソースにアクセスしようとすると、1 つのスレッドが入った後、パブリック リソースにアクセスしようとしている他のスレッドは一時停止され、クリティカル セクションに入るまで待機します。スレッドが終了した後は、クリティカル セクションが解放されると、他のスレッドがそれをプリエンプトできます。

Mutex: 相互排他的なオブジェクト機構を採用します。相互に排他的なオブジェクトを所有するスレッドのみが、パブリック リソースにアクセスする権限を持ちます。相互に排他的なオブジェクトは 1 つだけであるため、パブリック リソースが複数のスレッドによって同時にアクセスされないことが保証されます。 Mutex は、同じアプリケーションのパブリック リソースの安全な共有を実現するだけでなく、異なるアプリケーションのパブリック リソースの安全な共有も実現でき、クリティカル セクションよりも複雑です。なぜなら、相互排他を使用すると、同じアプリケーションの異なるスレッド間でリソースを安全に共有できるだけでなく、異なるアプリケーションのスレッド間でもリソースを安全に共有できるからです。

セマフォ: 複数のスレッドが同じリソースに同時にアクセスできるようにしますが、このリソースに同時にアクセスできるスレッドの最大数を制限する必要があります。セマフォ オブジェクトがスレッドを同期する方法はこれまでの方法とは異なり、シグナルにより複数のスレッドが共有リソースを同時に使用できるようになり、これはオペレーティング システムの PV 操作と同じです。共有リソースに同時にアクセスできるスレッドの最大数を示します。複数のスレッドが同じリソースに同時にアクセスできますが、このリソースに同時にアクセスできるスレッドの最大数を制限する必要があります。

イベント: 通知操作を通じてスレッドの同期を維持し、複数のスレッドの優先順位の比較も容易にします。

[関連チュートリアルの推奨事項: AJAX ビデオ チュートリアル ]

以上がAjax リクエストはデフォルトで非同期リクエストですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。