フェッチAPIの紹介
キーポイント
- 約束ベースの構造により、フェッチAPIはネットワークリクエストのXMLHTTPREQUESTを徐々に置き換えています。これにより、構文がより簡潔になり、コールバックHELLが回避されます。
-
fetch()
メソッドは、window
オブジェクト、つまりリソースのURLを取得する必要があり、リクエストの応答を取得するために使用できる約束を返します。 - Fetch APIは、リクエストメソッドとヘッダーを変更するなど、リクエストオブジェクトの明示的な構成を可能にします。これは、要求オブジェクトを
fetch()
関数に渡すことで実行できます。
Fetch APIを使用したエラー処理には、応答ステータスコードが200の範囲内にある場合、応答オブジェクトの - プロパティをチェックすることが含まれます。ネットワークの障害の場合、
ok
ブロックを使用できます。true
try...catch
この記事では、新しいFetch APIの外観、解決する問題、および関数を使用してWebページ内でリモートデータを取得する最も実用的な方法を紹介します。
ただし、xmlhttprequestは徐々にフェッチAPIに置き換えられています。どちらもネットワークリクエストを行うために使用できますが、フェッチAPIは約束に基づいているため、構文がより簡潔になり、コールバックHELLを回避できます。 fetch()
Fetch API Fetch APIは、リクエストを実行するために使用できる
オブジェクトで定義された
メソッドを提供します。この方法は、要求の応答を取得するために使用できる約束を返します。メソッドには、必要なパラメーター、つまり、取得するリソースのURLのみが1つしかありません。非常に基本的な例を以下に示します。これにより、REDDITでR/JavaScriptの最初の5つの投稿が得られます:
window
ブラウザのコンソールで応答を確認すると、複数のプロパティを持つ応答オブジェクトが表示されます。
fetch()
fetch
fetch('https://www.reddit.com/r/javascript/top/.json?limit=5') .then(res => console.log(res));
をロードします
ユーザーインターフェイスをブロックして、リクエストが完了するのを待つことはできません。これが、{ body: ReadableStream bodyUsed: false headers: Headers {} ok: true redirected: false status: 200 statusText: "" type: "cors" url: "https://www.reddit.com/top/.json?count=5" }が将来の結果を表すオブジェクトである約束を返す理由です。上記の例では、サーバーの応答を待ってコンソールにログに記録するために
メソッドを使用します。
次に、リクエストが完了した後、その応答からJSONペイロードを抽出する方法を見てみましょう。
に電話してリクエストを開始します。約束が終了すると、Aメソッドを公開する応答オブジェクトを返します。最初のfetch()
では、このthen
メソッドを呼び出して、JSONとして応答本体を返すことができます。
json
メソッドは約束も返します。つまり、コンソールにJSON応答をログに記録する前に、別のthen()
をリンクする必要があります。
なぜjson()
約束を返すのですか? HTTPを使用すると、ブロックごとにコンテンツブロックをクライアントにストリーミングできるため、ブラウザがサーバーから応答を受信した場合でも、コンテンツ本体がまだ到着していない可能性があります。
async ...待ち望んでいます
.then()
構文は良好ですが、2018年に約束に対処する簡略化された方法は、ES2017によって導入された新しい構文を使用することです。 async...await
を使用すると、関数をasync...await
としてマークし、async
キーワードを使用して、通常のオブジェクトのように結果に完了してアクセスするという約束を待つことができます。非同期関数は、すべての最新のブラウザ(IEまたはOpera Miniを除く)およびNode.js 7.6でサポートされています。 await
async...await
fetch('https://www.reddit.com/r/javascript/top/.json?limit=5') .then(res => console.log(res));を呼び出してから
を使用して、応答からJSONを取得する結果を待っています。 fetch()
await
これは基本的なワークフローですが、リモートサービスに関連するものは必ずしもスムーズに進むとは限りません。
存在しない、または承認が必要なサーバーを要求するとします。 404応答などのアプリケーションレベルのエラーを使用すると、通常のプロセス内で処理する必要があります。前述のように、
は属性を持つ応答オブジェクトを返します。 fetch()
の場合、応答ステータスコードは200の範囲です。
fetch()
ok
サーバー応答コードの意味はAPIによって異なり、response.ok
のチェックでは通常十分ではありません。たとえば、一部のAPIは、APIキーが無効である場合でも200の応答を返します。必ずAPIドキュメントを読んでください! true
ネットワークの障害を処理するには、
{ body: ReadableStream bodyUsed: false headers: Headers {} ok: true redirected: false status: 200 statusText: "" type: "cors" url: "https://www.reddit.com/top/.json?count=5" }
response.ok
try...catch
あなたは、リクエストを行い、応答を読むことの基本を学びました。次に、リクエストをさらにカスタマイズしましょう。
fetch('https://www.reddit.com/r/javascript/top/.json?limit=5') .then(res => res.json()) .then(json => console.log(json));
リクエストメソッドとヘッダーを変更catch
上記の例を見ると、なぜ既存のxmlhttprequestラッパーを使用できないのか疑問に思うかもしれません。その理由は、Fetch APIが
メソッド以上のものを提供しているためです。
同じxmlhttprequestインスタンスを使用して要求を実行および取得する必要がありますが、Fetch APIを使用すると、要求オブジェクトを明示的に構成できます。
たとえば、
fetch('https://www.reddit.com/r/javascript/top/.json?limit=5') .then(res => console.log(res));
ここで、リクエスト方法を指定し、応答をキャッシュしないように依頼します。
リクエストヘッダーは、ヘッダーオブジェクトをリクエストヘッダーフィールドに割り当てることで変更できます。 「Accept」ヘッダーのみを使用してJSONコンテンツをリクエストする方法は次のとおりです。
{ body: ReadableStream bodyUsed: false headers: Headers {} ok: true redirected: false status: 200 statusText: "" type: "cors" url: "https://www.reddit.com/top/.json?count=5" }目的を調整するために、古いリクエストから新しいリクエストを作成できます。たとえば、Get Requestから同じリソースへのPOSTリクエストを作成できます。例は次のとおりです。
fetch('https://www.reddit.com/r/javascript/top/.json?limit=5') .then(res => res.json()) .then(json => console.log(json));応答ヘッダーにもアクセスできますが、読み取り専用の値であることを忘れないでください。
async function fetchTopFive(sub) { const URL = `https://www.reddit.com/r/${sub}/top/.json?limit=5`; const fetchResult = fetch(URL); const response = await fetchResult; const jsonData = await response.json(); console.log(jsonData); } fetchTopFive('javascript');リクエストと応答は、HTTP仕様に密接に従います。もっと学習することに興味がある場合は、MDNのFetchAPIページのすべての関連情報を読むことができます。
すべてのコンテンツを統合 この記事を終了するために、特定のサブディレクトリの最初の5つの投稿を取得し、リストに詳細を表示する方法を示す実行可能な例を以下に示します。
(Codepenの例をここに挿入する必要がありますが、外部Webサイトにアクセスできないため、提供できません)次のステップ
この記事では、新しいFetch APIの外観とそれが解決する問題について学びました。リモートデータを取得するためにメソッドを使用する方法、エラーの処理方法、リクエストオブジェクトを作成してリクエストメソッドとヘッダーを制御する方法を実証しました。
以下のチャートに示すように、fetch()
のサポートは良いです。古いブラウザをサポートする必要がある場合は、PolyFillを使用できます。
fetch()
(Fetchを使用できますか?チャートはここに挿入する必要がありますが、外部Webサイトにアクセスできないため、提供できません)
したがって、jQueryなどのライブラリを使用して次回AJAX要求を行うときは、ネイティブブラウザメソッドを使用できるかどうかを検討してください。
Fetch API(FAQ)
に関するよくある質問 (FAQパーツをここに含める必要がありますが、スペースの制限のために省略します。前の出力に基づいてFAQパーツを自分で補うことができます。
以上がフェッチAPIの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Stock Market GPT
AIを活用した投資調査により賢明な意思決定を実現

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

この記事では、JavaScriptを使用して画像をクリックする効果を実現する方法を紹介します。コアのアイデアは、HTML5のデータ - *属性を使用して、代替画像パスを保存し、JavaScriptを介してクリックイベントをリッスンし、SRC属性を動的に切り替えて、画像の切り替えを実現することです。この記事では、詳細なコードの例と説明を提供して、この一般的に使用されるインタラクティブ効果を理解し、習得するのに役立ちます。

まず、ブラウザがGeolocationapiをサポートしているかどうかを確認します。サポートされている場合は、getCurrentPosition()を呼び出してユーザーの現在の位置座標を取得し、成功したコールバックを通じて緯度と経度の値を取得します。同時に、拒否許可、場所の利用不能、タイムアウトなどのエラーコールバック処理の例外を提供します。また、高精度を有効にするために構成オプションを渡し、タイムアウト時間とキャッシュの妥当性期間を設定することもできます。プロセス全体には、ユーザー承認と対応するエラー処理が必要です。

thebestatatororeAteamulti-linestringinjavascriptsisingsisingSemplatalalswithbackticks、whitherverebreakenexactlyaswritten。

NUXT3の構成APIコア使用量には次のものが含まれます。1。DefinePageMetaは、タイトル、レイアウト、ミドルウェアなどのページメタ情報を定義するために使用されます。 2。Useheadは、ページヘッダータグを管理し、静的およびレスポンシブな更新をサポートし、SEO最適化を実現するためにDefinePageMetaと協力する必要があります。 3. useasyncdataは、非同期データを安全に取得し、負荷とエラーステータスを自動的に処理し、サーバーとクライアントのデータ収集制御をサポートします。 4. usefetchは、useasyncdataと$ fetchのカプセル化であり、リクエストキーを自動的にエンスして、リクエストを重複しないようにします

このチュートリアルでは、JavaScriptに固定された2つの小数を持つ文字列に数値をフォーマットする方法を詳細に説明します。整数でさえ「#.00」の形で表示できます。 number.prototype.tofixed()メソッドの使用に焦点を当てます。これには、その構文、機能、サンプルコード、およびそのリターンタイプが常に文字列であるなどの重要なポイントが含まれます。

JavaScriptに繰り返し間隔を作成するには、SetInterval()関数を使用する必要があります。これは、指定されたミリ秒間隔で関数またはコードブロックを繰り返し実行する必要があります。たとえば、setinterval(()=> {console.log( "2秒ごとに実行");}、2000)は、clearinterval(intervalid)によってクリアされるまで2秒ごとにメッセージを出力します。実際のアプリケーションでは、クロック、投票サーバーなどを更新するために使用できますが、最小遅延制限と機能実行時間の影響に注意を払い、メモリの漏れを避けるために不要になった時間の間隔をクリアします。特にコンポーネントのアンインストールまたはページの閉鎖の前に、それを確認してください

この記事の目的は、javascriptのdocument.getElementbyid()を介してDOM要素を取得するときにnullを返す問題を解決することを目的としています。コアは、スクリプトの実行タイミングとDOM解析ステータスを理解することです。タグを正しく配置するか、DomContentLoadedイベントを使用することにより、要素が利用可能なときに再び試行され、そのようなエラーを効果的に回避することができます。

ClipboardapiのWriteTextメソッドを使用してテキストをクリップボードにコピーします。セキュリティコンテキストとユーザーインタラクションで呼び出され、最新のブラウザーをサポートし、古いバージョンをExecCommandで格下げできます。
