細節敘述見如下連接:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetchhtml
1 基本概念:
react
WindowOrWorkerGlobalScope.fetch()
用於獲取資源的方法。git
Headers
表示響應/請求標頭,容許您查詢它們並根據結果採起不一樣的操做。github
Request
表示資源請求。web
Response
表示對請求的響應。json
2. Fetch API api
Fetch API 包含一組類和方法,用來簡化 HTTP 請求。其中包含如下方法和類:跨域
1 fetch('https://api.github.com/repos/facebook/react').then(function(res){ 2 return res.json(); 3 }).then(function(data){ 4 console.log(data) 5 });
fetch 方法有兩種調用方法,第一個參數能夠是一個 Request 對象,也能夠是一個簡單的 url,第二個參數是可選參數,包含一些配置信息。promise
Promise fetch(String url [, Object options]);
Promise fetch(Request req [, Object options]);
可選的配置信息能夠一個簡單對象,能夠包含下列字段:緩存
該函數返回一個 Promise 對象,若請求成功會用 Response 的實例做爲參數調用 resolve ,若請求失敗會用一個錯誤對象來調用 reject。
Headers 類用來表示 HTTP 的頭部信息,其構造函數能夠接受一個表示 HTTP 頭信息的對象,也能夠接受一個 Headers 類的實例做爲對象:
1 var header1 = new Headers({ 2 'Content-Type': 'image/jpeg', 3 'Accept-Charset': 'utf-8'
4 }); 5
6 var header2 = new Headers(header1);
對一個字段追加信息,若是該字段不存在,就建立一個。
1 var header = new Headers(); 2 header.append('Accept-Encoding', 'deflate'); 3 header.append('Accept-Encoding', 'gzip'); 4 // Accept-Encoding: ['deflate', 'gzip']
刪除某個字段
得到某個字段的第一個值
var header = new Headers(); header.append('Accept-Encoding', 'deflate'); header.append('Accept-Encoding', 'gzip'); header.get('Accept-Encoding'); //=> 'deflate'
得到某個字段全部的值
var header = new Headers(); header.append('Accept-Encoding', 'deflate'); header.append('Accept-Encoding', 'gzip'); header.getAll('Accept-Encoding'); //=> ['deflate', 'gzip']
判斷是否存在某個字段
設置一個字段,若是該字段已經存在,那麼會覆蓋以前的。
遍歷全部的字段,接受一個回調函數,和可選的第二個參數。可選的第二個參數地值做爲回調函數的 this 值。
var header = new Headers(); header.append('Accept-Encoding', 'deflate'); header.forEach(function(value, name, header){ //...
},this);
Request 對象用於描述請求內容。構造函數接受的參數和 fetch 函數的參數形式同樣,實際上 fetch 方法會使用傳入的參數構造出一個 Request 對象來。
下面例子從 github 抓取到 react 的 star 數並打印出來。
var req = new Request('https://api.github.com/repos/facebook/react',{ method:'GET' }); fetch(req).then(function(res){ return res.json() }).then(function(data){ console.log(data.stargazers_count) });
如下屬性均爲只讀屬性。這些屬性的意義均在上面介紹 fetch 的參數的時候有過說明。
Response 用來表示 HTTP 請求的響應。其構造函數形式以下:
var res = new Response(body, init);
其中 body 能夠是:
init 是一個對象,其中包括如下字段:
如下屬性均爲只讀屬性
要想從 Response 的實例中拿到最終的數據須要調用下面這些方法,這些方法都返回一個 Promise 而且使用對應的數據類型來 resolve。
最後在把上面使用例子進行一個細緻的說明:
1 // 構造出 Request 對象
2 var req = new Request('https://api.github.com/repos/facebook/react',{ 3 method:'GET'
4 }); 5
6 // 發起請求,fetch 方法返回一個 Promise 對象
7 fetch(req).then(function(res){ 8 // 獲得了 response,這裏調用 response 的 json 方法
9 // 該方法一樣返回一個 Promise
10 return res.json(); 11 }).then(function(data){ 12 // 獲得解析後的對象
13 console.log(data.stargazers_count) 14 });