Window: fetch() メソッド
Baseline
広く利用可能
*
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2017年3月以降、すべてのブラウザーで利用可能です。
* この機能の一部は、対応レベルが異なる場合があります。
fetch() は Window インターフェイスのメソッドで、ネットワークからリソースを取得するプロセスを開始し、レスポンスが利用できるようになったら履行されるプロミスを返します。
このプロミスは、そのリクエストに対するレスポンスを表す Response で解決します。
fetch() のプロミスは、ネットワークエラーが発生した場合(普通は権限の問題があったときなど)のみ拒否されます。
fetch() のプロミスは、サーバーがエラーを示す HTTP ステータスコード(404、504 など)を返しても拒否されません。
代わりに、 then() ハンドラーで Response.ok や Response.status プロパティをチェックする必要があります。
fetch() メソッドは取得するリソースのディレクティブではなく、コンテンツセキュリティポリシーの connect-src ディレクティブによって制御されます。
メモ:
fetch() メソッドの引数は Request() コンストラクターと全く同じです。
構文
fetch(resource)
fetch(resource, options)
引数
resource-
取得したいリソースを定義します。以下のどちらかが使用できます。
- 文字列または文字列化できるその他のオブジェクト(
URLオブジェクトを含む)。取得したいリソースの直接の URL を含む文字列です。この URL は、文書内のbaseURI、ワーカーコンテキストではWorkerGlobalScope.locationとなります。 Requestオブジェクト。
- 文字列または文字列化できるその他のオブジェクト(
options省略可-
リクエストに適用する独自の設定を含む
RequestInitオブジェクトです。
返値
例外
AbortErrorDOMException-
AbortControllerのabort()メソッドの呼び出しによりリクエストが中止された。 NotAllowedErrorDOMException-
次の場合に発生します。
- トピック API を使用することが、権限ポリシーの
browsing-topicsによって特別に禁止されており、browsingTopicsがtrueに設定されていたとき。 - プライベートステートトークン API の操作は、仕様上、
private-state-token-issuanceまたはprivate-state-token-redemptionを含む権限ポリシーによって明示的に禁止されており、かつprivateTokenオプションが指定され、その中に許可されていないprivateToken.operationの種類が含まれている場合です。
- トピック API を使用することが、権限ポリシーの
TypeError-
以下の理由で発生する可能性があります。
- リクエストされた URL が無効である。
- リクエストされた URL に資格情報(ユーザー名とパスワード)が含まれている。
optionsの値として渡されたRequestInitオブジェクトに、無効な値を持つプロパティが含まれている。- リクエストが権限ポリシーによってブロックされている。
- ネットワークエラーが発生している(例えば、端末がネットワークに接続していないため)。
privateToken初期化オプションが指定されており、privateToken.operationの種類がsend-redemption-recordであるにもかかわらず、privateToken.issues配列が空であるか設定されていないか、または指定されたissuersのうち 1 つ以上が信頼できない HTTPS URL であるため。
例
フェッチリクエストの例(フェッチリクエストのライブ版を参照)では、 Request オブジェクトを関連するコンストラクターで作成しています。
その後で fetch() を呼び出して取得しています。
画像を読み取っているため、レスポンスで Response.blob() を実行して正しい MIME タイプを指定して正しく扱われるようにし、オブジェクト URL を作成して <img> 要素に追加して表示させています。
const myImage = document.querySelector("img");
const myRequest = new Request("flowers.jpg");
window
.fetch(myRequest)
.then((response) => {
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
return response.blob();
})
.then((response) => {
myImage.src = URL.createObjectURL(response);
});
Fetch Request with init の例(Fetch Request init のライブ版)では上記の内容に加えて、fetch() を呼び出すとき、初期化オブジェクト init を渡しています。
この場合、Cache-Control 値を設定することで、どのようなキャッシュレスポンスであれば問題ないかを示すことができます。
const myImage = document.querySelector("img");
const reqHeaders = new Headers();
// キャッシュされたレスポンスは、それが 1 週間以上前のものでなければ問題ない
reqHeaders.set("Cache-Control", "max-age=604800");
const options = {
headers: reqHeaders,
};
// init をヘッダーと一緒に "options" オブジェクトとして渡す
const req = new Request("flowers.jpg", options);
fetch(req).then((response) => {
// …
});
同様に init オブジェクトを Request コンストラクターに渡しても、同じ効果が得られます。
const req = new Request("flowers.jpg", options);
init の headers でオブジェクトリテラルを使用することもできます。
const options = {
headers: {
"Cache-Control": "max-age=60480",
},
};
const req = new Request("flowers.jpg", options);
「fetch の使用方法」の記事では、fetch() の使用例をさらに詳しく提供しています。
仕様書
| 仕様書 |
|---|
| Fetch> # fetch-method> |