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 庫來的爽快。