fetch

认识到fetch是一次很偶然的时机。那是在阮一峰讲解redux中的异步操作中使用到了fetch,当时我很费解,这货怎么能直接使用then()方法呢…

简介

fetch是w3c推出来的用来取代ajax的一种标准。

fetch的使用

一般构造请求的方法

使用 fetch 的构造函数请求数据后,返回一个 Promise 对象,处理即可。

1
2
3
4
fetch(URL)
.then(function(response){
// do something...
})

fetch构成函数的其他选项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var myHeaders = new Headers();
myHeaders.append("Content-Type", "text/plain");
myHeaders.append("Content-Length", content.length.toString());
myHeaders.append("X-Custom-Header", "ProcessThisImmediately");
myHeaders.append("Cache-Control", "no-cache"); // 每次 API 的请求我们想不受缓存的影响

var myInit = {
method: 'GET', // 这里切换请求方式
headers: myHeaders,
mode: 'cors',
cache: 'default'
};

fetch(URL, myInit)
.then(function(response){
// do something...
})

返回的数据结构

常用的数据有:

  • Response.status也就是StatusCode,如成功就是200
  • Response.statusTextStatusCode的描述文本,如成功就是OK
  • Response.ok一个Boolean类型的值,判断是否正常返回,也就是StatusCode200-299

Body参数

因为在RequestResponse中都包含Body的实现,所以包含以下类型:
ArrayBuffer、 ArrayBufferView (Uint8Array and friends)、 Blob/File、 string、 URLSearchParams、 FormData。
fetch中实现了对应的方法,并返回的都是Promise类型:
arrayBuffer()、 blob()、 json()、 text()、 formData()

兼容性问题

原生支持率并不高,幸运的是,引入下面这些polyfill后可以完美支持 IE8+ :

叶思玄 wechat
如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!