天天看點

javascript json_JavaScript基礎:fetch()的用法,傳回Promise,傳回值json()化一個基本的 fetch請求支援的請求參數

Fetch API 提供了一個 JavaScript接口,用于通路和操縱HTTP管道的部分,例如請求和響應。它還提供了一個全局 fetch()方法,該方法提供了一種簡單,合理的方式來跨網絡異步擷取資源。

請注意,fetch規範與jQuery.ajax()主要有兩種方式的不同,牢記:

當接收到一個代表錯誤的 HTTP 狀态碼時,從 fetch()傳回的 Promise 不會被标記為 reject, 即使該 HTTP 響應的狀态碼是 404 或 500。相反,它會将 Promise 狀态标記為 resolve (但是會将 resolve 的傳回值的 ok 屬性設定為 false ),僅當網絡故障時或請求被阻止時,才會标記為 reject。

預設情況下,fetch 不會從服務端發送或接收任何 cookies, 如果站點依賴于使用者 session,則會導緻未經認證的請求(要發送 cookies,必須設定 credentials 選項)。自從2017年8月25日後,預設的credentials政策變更為same-originFirefox也在61.0b13中改變預設值

一個基本的 fetch請求

fetch('http://example.com/movies.json') .then(function(response) { return response.json(); }) .then(function(myJson) { console.log(myJson); });
           
javascript json_JavaScript基礎:fetch()的用法,傳回Promise,傳回值json()化一個基本的 fetch請求支援的請求參數

這裡我們通過網絡擷取一個JSON檔案并将其列印到控制台。最簡單的用法是隻提供一個參數用來指明想fetch()到的資源路徑,然後傳回一個包含響應結果的promise(一個 Response 對象)。

當然它隻是一個 HTTP 響應,而不是真的JSON。為了擷取JSON的内容,我們需要使用 json()方法(在Bodymixin 中定義,被 Request 和 Response 對象實作)。

支援的請求參數

fetch() 接受第二個可選參數,一個可以控制不同配置的 init 對象:

// Example POST method implementation:postData('http://example.com/answer', {answer: 42}) .then(data => console.log(data)) // JSON from `response.json()` call .catch(error => console.error(error))function postData(url, data) { // Default options are marked with * return fetch(url, { body: JSON.stringify(data), // must match 'Content-Type' header cache: 'no-cache', // *default, no-cache, reload, force-cache, only-if-cached credentials: 'same-origin', // include, same-origin, *omit headers: { 'user-agent': 'Mozilla/4.0 MDN Example', 'content-type': 'application/json' }, method: 'POST', // *GET, POST, PUT, DELETE, etc. mode: 'cors', // no-cors, cors, *same-origin redirect: 'follow', // manual, *follow, error referrer: 'no-referrer', // *client, no-referrer }) .then(response => response.json()) // parses response to JSON}
           
javascript json_JavaScript基礎:fetch()的用法,傳回Promise,傳回值json()化一個基本的 fetch請求支援的請求參數

更多内容:https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch

繼續閱讀