Web アプリケーションが進化し続けるにつれて、クライアント側 JavaScript の重要性がますます高まっています。JavaScript では、jQuery が最も人気のあるライブラリの 1 つです。
jQuery は、高速、小型、機能豊富なクロスブラウザー JavaScript ライブラリであり、HTML ドキュメントの走査と操作をより簡単かつ便利にします。 jQuery では、通常、非同期データ要求に AJAX テクノロジを使用します。ただし、場合によっては、同期リクエストを使用する必要があるため、この問題を解決するには、jQuery のフェッチ同期リクエストを使用します。
この記事では、基本的な構文と一般的な問題の解決策を含め、jQuery のフェッチ同期リクエストの使用法を紹介します。
jQuery のフェッチ同期リクエストを使用する場合、AJAX リクエストで async:false
を含むパラメータを渡す必要があります。このパラメーターを使用すると、非同期リクエストが応答を返す前にコードの実行を続行せず、サーバーの応答を待ってから JavaScript コードの実行を続行することができます。
たとえば、jQuery を介して同期 GET リクエストを開始します:
$.ajax({ url:"http://localhost:8080/api/data", dataType:"json", async:false, success: function(data) { console.log(data); } });
フェッチ同期リクエストの基本的な構文を見てみましょう:
$.ajax({ url: 'example.json', async: false, dataType: 'json', success: (data) => console.log(data) });
上記のコードではでは、jQuery の $.ajax()
関数を使用して、async:false
パラメーターを含むオブジェクトを渡します。同時に、リクエストの URL とデータ型を指定し、リクエストが成功した後に応答データを出力します。
フェッチ同期リクエストを使用する場合、サーバーの応答時間が長すぎると、 JavaScript の実行をブロックします。これは、応答が返されるまで、ページ上の JavaScript コードは実行できないことを意味します。さらに、リクエストはタイムアウトになるかサーバーが応答するまで保留状態になる場合があります。
解決策: プログラムのブロックを回避したい場合は、非同期リクエストを使用するか、リクエストをより小さな部分に分割することをお勧めします。
フェッチ リクエストは、非同期リクエストとは異なり、デフォルトではサーバーに Cookie を送信しません。 Cookie を使用する場合は、パラメーター credentials
の値を 'include'
に設定する必要があります。
$.ajax({ url: 'example.json', async: false, dataType: 'json', credentials: 'include', success: (data) => console.log(data) });
ブラウザの同一生成元ポリシー制限により、フェッチ同期リクエストがクロスドメインによってインターセプトされる可能性があります。この時点で、ブラウザはリクエストの送信をブロックする可能性があります。
解決策: JSONP (パディング付き JSON) テクノロジまたはプロキシ サーバーを使用して、クロスドメインの問題を回避できます。
フェッチ同期リクエストは GET メソッドと POST メソッドのみをサポートします。他の HTTP メソッドを使用する必要がある場合は、非同期リクエストを使用する必要があります。
ページ ライフ サイクル イベント (onbeforeunload
など) 中に同期リクエストが発生すると、ページは次のようになります。応答が返されるまでブロックします。これにより、ページが長時間ハングアップし、ユーザーに不快感を与える可能性があります。
解決策: ページのライフサイクル イベントでフェッチ同期リクエストを使用しないようにします。
この記事では、jQuery のフェッチ同期リクエストの使用方法と一般的な問題の解決方法を紹介します。同期リクエストの使用は状況によっては便利ですが、注意すべき潜在的な問題がいくつかあります。 Web アプリケーションのユーザー エクスペリエンスを向上させるには、可能な限り非同期リクエストを使用することをお勧めします。
以上がjqueryのフェッチ同期リクエストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。