认识到fetch是一次很偶然的时机。那是在阮一峰讲解redux中的异步操作中使用到了fetch,当时我很费解,这货怎么能直接使用then()方法呢…
简介
fetch
是w3c推出来的用来取代ajax的一种标准。
fetch
的使用
一般构造请求的方法
使用 fetch 的构造函数请求数据后,返回一个 Promise 对象,处理即可。1
2
3
4fetch(URL)
.then(function(response){
// do something...
})
fetch
构成函数的其他选项
1 | var myHeaders = new Headers(); |
返回的数据结构
常用的数据有:
Response.status
也就是StatusCode
,如成功就是200
。Response.statusText
是StatusCode
的描述文本,如成功就是OK
。Response.ok
一个Boolean
类型的值,判断是否正常返回,也就是StatusCode
为200-299
。
Body
参数
因为在Request
和Response
中都包含Body
的实现,所以包含以下类型:
ArrayBuffer、 ArrayBufferView (Uint8Array and friends)、 Blob/File、 string、 URLSearchParams、 FormData。
在fetch
中实现了对应的方法,并返回的都是Promise
类型:
arrayBuffer()、 blob()、 json()、 text()、 formData()
兼容性问题
原生支持率并不高,幸运的是,引入下面这些polyfill
后可以完美支持 IE8+ :
- 由于IE8是ES3,需要引入ES5的polyfill: es5-shim, es5-sham
- 引入Promise的polyfill: es6-promise
- 引入fetch探测库:fetch-detector
- 引入fetch的polyfill: fetch-ie8
- 可选:如果你还使用了jsonp,引入 fetch-jsonp
- 可选:开启
Babel
的runtime
模式,现在就使用async/await