Fetch是全局对象window的一个方发,是XMLHttpRequest一个更现代化的替代方案。
Fetch暂时不支持abort request。
Fetch是基于promise的。
javascript
Fetch返回一个promise,能够使用then来处理结果,或者搭配async/await使用。
let promise = fetch(url, [options])
java
先看一个最简单的get用法示例:git
// url (required), options (optional) fetch('https://davidwalsh.name/some/url', { method: 'get' }).then(function(response) { // response.... }).catch(function(err) { // Error... }); 复制代码
下面是一个稍微复杂的post用法示例:github
fetch(url, { method: 'POST', body: JSON.stringify(data), headers: { "Content-Type": "application/json" }, credentials: "same-origin" }).then(function(response) { response.status //=> number 100-599 response.statusText //=> String response.headers //=> Headers response.url //=> String return response.text() }, function(error) { error.message //=> String }) 复制代码
Fetch使用Promises来处理response。Fetch接收两个参数:json
还能够使用Request对象实例做为参数的方式发起fetch请求:跨域
var request = new Request(url, options); fetch(request).then(function(response) { // handle with response... }).catch(function(err) { // Error... }); 复制代码
options能够配置如下参数:promise
{ body: new URLSearchParams([['foo', 1], ['bar', 2]]).toString() } 复制代码
body的类型包括:浏览器
Class | Default Content-Type |
---|---|
String | text/plain;charset=UTF-8 |
URLSearchParams | application/x-www-form-urlencoded;charset=UTF-8 |
FormData | multipart/form-data |
Blob | inherited from the blob.type property |
ArrayBuffer | |
TypedArray | |
DataView |
其余数据结构须要预先编码为上述类型之一。例如,JSON.stringify(data)可用于将数据结构序列化为JSON字符串。bash
{ headers: new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' // 指定提交方式为表单提交 }) } 复制代码
headers提供如下方法增删改查头部信息:服务器
Response表示来自服务器的HTTP响应。Response会做为promise回调函数的参数。 包含如下属性:
此外,response还提供了一些方法处理成特定的数据格式并返回一个Promise:
获取响应一般须要通过两个阶段:
let response = await fetch('/article/fetch/logo-fetch.svg'); let blob = await response.blob(); // 以 Blob 对象下载 img.src = URL.createObjectURL(blob); 复制代码
若是出现网络错误或其余缘由致使HTTP请求没法完成,fetch()的promise 将会reject该error。 注意,在HTTP 4xx或5xx服务器响应的状况下,promise不会reject。这个promise将像HTTP 2xx同样正常resolve。能够经过检查response.status的状态码来决定如何处理错误:
fetch(...).then(function(response) { if (response.ok) { return response } else { var error = new Error(response.statusText) error.response = response throw error } }) 复制代码
截至目前,fetch的浏览器兼容状况以下图所示: (能够在can I use这个网站查询浏览器兼容性)
若是想要兼容IE及老版本浏览器,能够使用polyfill:whatwg-fetch