サーチ…


構文

  • promise = fetch(url).then(function(response){})
  • promise = fetch(url、options)
  • 約束=フェッチ(要求)

パラメーター

オプション詳細
method 要求に使用するHTTPメソッド。例: GETPOSTPUTDELETEHEAD 。デフォルトはGETです。
headers 要求に含める追加のHTTPヘッダーを含むHeadersオブジェクト。
body 要求ペイロードは、 stringまたはFormDataオブジェクトです。デフォルトはundefined
cache キャッシングモード。 defaultreloadno-cache
referrer リクエストのリファラー。
mode corsno-corssame-origin 。デフォルトはno-corsです。
credentials omitsame-origininclude 。デフォルトではomitます。
redirect followerrormanual 。デフォルトにfollow
integrity 関連する整合性メタデータデフォルトは空文字列です。

備考

フェッチ標準は、要求、応答、およびそれらをバインドするプロセスを定義します。

他のインターフェイスの中でも、この標準では、ネットワーク要求を含むすべての操作に使用するように設計されたRequestオブジェクトとResponseオブジェクトが定義されています。

これらのインターフェイスの便利なアプリケーションはGlobalFetch 、リモートリソースをロードするために使用できます。

Fetch標準をまだサポートしていないブラウザの場合、GitHubにはpolyfillが用意されています。さらに、サーバー/クライアントの一貫性に役立つNode.js実装もあります。

キャンセル可能な約束がない場合、フェッチ要求を中止することはできません( githubの問題 )。しかし、キャンセル可能な約束については、第1段階のT39による提案がある。

GlobalFetch

GlobalFetchインターフェイスはfetch関数を公開しています.fetch関数はリソースの要求に使用できます。

fetch('/path/to/resource.json')
    .then(response => {
        if (!response.ok()) {
            throw new Error("Request failed!");
        }
            
        return response.json();
    })
    .then(json => { 
        console.log(json);
    }); 

解決された値は応答オブジェクトです。このオブジェクトは、レスポンスの本文とステータスとヘッダーを含みます。

リクエストヘッダを設定する

fetch('/example.json', {
    headers: new Headers({
        'Accept': 'text/plain',
        'X-Your-Custom-Header': 'example value'
    })
});

POSTデータ

フォームデータの転記

fetch(`/example/submit`, {
    method: 'POST',
    body: new FormData(document.getElementById('example-form'))
});

JSONデータの投稿

fetch(`/example/submit.json`, {
    method: 'POST',
    body: JSON.stringify({
        email: document.getElementById('example-email').value,
        comment: document.getElementById('example-comment').value
    })
});

クッキーを送信する

フェッチ機能はデフォルトでクッキーを送信しません。 Cookieを送信する方法は2つあります。

  1. URLが呼び出し元のスクリプトと同じ起点にある場合のみ、Cookieを送信します。
fetch('/login', {
    credentials: 'same-origin'
})
  1. クロスオリジン通話の場合でも、常にクッキーを送信してください。
fetch('https://otherdomain.com/login', {
    credentials: 'include'
})

JSONデータの取得

// get some data from stackoverflow
fetch("https://api.stackexchange.com/2.2/questions/featured?order=desc&sort=activity&site=stackoverflow")
  .then(resp => resp.json())
  .then(json => console.log(json))
  .catch(err => console.log(err));

フェッチを使用してスタックオーバーフローAPIからの質問を表示する

const url =
      'http://api.stackexchange.com/2.2/questions?site=stackoverflow&tagged=javascript';

const questionList = document.createElement('ul');
document.body.appendChild(questionList);

const responseData = fetch(url).then(response => response.json());
responseData.then(({items, has_more, quota_max, quota_remaining}) => {
  for (const {title, score, owner, link, answer_count} of items) {
    const listItem = document.createElement('li');
    questionList.appendChild(listItem);
    const a = document.createElement('a');
    listItem.appendChild(a);
    a.href = link;
    a.textContent = `[${score}] ${title} (by ${owner.display_name || 'somebody'})`
  }
});


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow