html5 引入了新的网络请求接口Fetch API
,原生支持Promise,可配合 async/await 语法使用。javascript
使用 fetch 用户数据列表。html
fetch('/users')
.then(res=>res.json())//服务器返回的是json
.then(user=>{console.log(user);})
.catch(error=>{console.log(error);})
复制代码
async/await 语法html5
async function getUsers() {
try {
let res = await fetch('/users');
let users = await res.json();
console.log(users)
} catch (error) {
console.log(error)
}
}
复制代码
fetch 返回的不是真正须要的数据,而是一个 Promise
,全部还须要使用它提供的方法进一步获取想要的数据。java
两种调用方式:ios
fetch(url,options)
fetch(req,options)
复制代码
推荐使用第一种,一眼就能够看到url,更加直观。git
options 是一个对象,可设置如下字段:github
Headers
的实例;Blod
、bufferSource
、FormData
、URLSearchParams
、USVstring
,GET、HEAD 没有body;GET
、HEAD
、POST
;cookies
:
same-origin
时有效。Headers 用于构造请求头信息,构造函数接收一个对象,对象的key-value
就是请求头的信息。json
let headers = new Headers(
{
'content-type':'text/plain',
'content-length':data.toString().length
}
);
headers.append('X-Custom-header','AnotherValue');//追加
headers.has('content-type');//true 查询
headers.get('content-type');//'text/plain' 获取
// headers.getAll('content-type');//['text/plain'] getAll 被移除了
headers.delete('content-type');//删除
headers.set('content-type','json');//重写
复制代码
请求对象。能够新建一个,也能够从已有的对象中继承。axios
let Url = '/users';
let req = new Request(Url,{method:'GET',headers})
// 扩展 request
let postReq= new Requset(req,{method:'POST'})
复制代码
Response 实例是 fertch 处理完 promise 以后的返回的。也能够手动建立,在servoceWorkers
中才真实有用。跨域
let res = new Response(body,init)
复制代码
body 能够是Bolb
、BufferSource
、FormData
、URLSearchParams
、USVString
这些值。
init 是一个对象,可包含如下字段:
response 的实例还有一些可读属性:
true
;no-cors
的响应。response 有一些方法来 reslove 响应信息。
ok
为false。只有当网络故障或者请求被阻止了,才会 reject
;Promise.race
,了模拟二者;getReader
,可根据这个来获取下载进度。;仍是使用原生的 xhr 和 axios 库来的爽快。