フェッチAPIの紹介

Feb 15, 2025 am 11:22 AM

Introduction to the Fetch API

キーポイント

  • 約束ベースの構造により、フェッチAPIはネットワークリクエストのXMLHTTPREQUESTを徐々に置き換えています。これにより、構文がより簡潔になり、コールバックHELLが回避されます。
  • fetch()メソッドは、windowオブジェクト、つまりリソー​​スのURLを取得する必要があり、リクエストの応答を取得するために使用できる約束を返します。
  • Fetch APIは、リクエストメソッドとヘッダーを変更するなど、リクエストオブジェクトの明示的な構成を可能にします。これは、要求オブジェクトをfetch()関数に渡すことで実行できます。
  • Fetch APIを使用したエラー処理には、応答ステータスコードが200の範囲内にある場合、応答オブジェクトの
  • プロパティをチェックすることが含まれます。ネットワークの障害の場合、okブロックを使用できます。 true try...catch この記事では、新しいFetch APIの外観、解決する問題、および関数を使用してWebページ内でリモートデータを取得する最も実用的な方法を紹介します。
長年、XMLHTTPREQUESTはWeb開発者にとって信頼できるアシスタントでした。 XMLHTTPREQUESTは、直接使用するかどうかにかかわらず、GmailからFacebookまで、Ajaxと新しいインタラクティブエクスペリエンスをサポートしています。

ただし、xmlhttprequestは徐々にフェッチAPIに置き換えられています。どちらもネットワークリクエストを行うために使用できますが、フェッチAPIは約束に基づいているため、構文がより簡潔になり、コールバックHELLを回避できます。 fetch()

Fetch API Fetch APIは、リクエストを実行するために使用できる

オブジェクトで定義された

メソッドを提供します。この方法は、要求の応答を取得するために使用できる約束を返します。

メソッドには、必要なパラメーター、つまり、取得するリソースのURLのみが1つしかありません。非常に基本的な例を以下に示します。これにより、REDDITでR/JavaScriptの最初の5つの投稿が得られます:

windowブラウザのコンソールで応答を確認すると、複数のプロパティを持つ応答オブジェクトが表示されます。 fetch()

リクエストは成功したようですが、最初の5つの投稿はどこにありますか?調べてみましょう。

fetch

json
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を使用すると、要求オブジェクトを明示的に構成できます。 たとえば、要求を変更する方法(たとえば、リクエストメソッドを構成する)を変更する必要がある場合、リクエストオブジェクトを

関数に渡すことができます。リクエストコンストラクターの最初のパラメーターはリクエストURLであり、2番目のパラメーターはリクエストを構成するためのオプションオブジェクトです。
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 サイトの他の関連記事を参照してください。

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

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

JavaScriptは、クリックスルーイメージの切り替え効果を実現します:プロフェッショナルチュートリアル JavaScriptは、クリックスルーイメージの切り替え効果を実現します:プロフェッショナルチュートリアル Sep 18, 2025 pm 01:03 PM

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

JavaScriptでGeolocation APIを使用してユーザーの位置を取得するにはどうすればよいですか? JavaScriptでGeolocation APIを使用してユーザーの位置を取得するにはどうすればよいですか? Sep 21, 2025 am 06:19 AM

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

JavaScriptでマルチライン文字列を作成する方法は? JavaScriptでマルチライン文字列を作成する方法は? Sep 20, 2025 am 06:11 AM

thebestatatororeAteamulti-linestringinjavascriptsisingsisingSemplatalalswithbackticks、whitherverebreakenexactlyaswritten。

Nuxt 3組成APIについて説明しました Nuxt 3組成APIについて説明しました Sep 20, 2025 am 03:00 AM

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

javascriptでの数字のフォーマット:tofixed()メソッドを使用して、固定小数点以下の場所を保持します javascriptでの数字のフォーマット:tofixed()メソッドを使用して、固定小数点以下の場所を保持します Sep 16, 2025 am 11:57 AM

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

javascriptでsetintervalで繰り返し間隔を作成する方法 javascriptでsetintervalで繰り返し間隔を作成する方法 Sep 21, 2025 am 05:31 AM

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

JavaScriptのDOM要素アクセスのための一般的な落とし穴とソリューション JavaScriptのDOM要素アクセスのための一般的な落とし穴とソリューション Sep 15, 2025 pm 01:24 PM

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

JavaScriptのクリップボードにテキストをコピーする方法は? JavaScriptのクリップボードにテキストをコピーする方法は? Sep 18, 2025 am 03:50 AM

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

See all articles