细节叙述见如下连接: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 });