Fetch

一直在用ajax,在到后來的axios,都是使用XMLHttpRequest去進行整體操作,整體過程也是那幾步.而Fetch是一套基于Promise設(shè)計出來用來處理異步請求的新的API,現(xiàn)在已經(jīng)在很多的框架中使用.

1.基本使用

基本使用非常簡單,使用Promise的鏈?zhǔn)綄懛?就能完成整個請求過程

fetch("fetch.php").then((response) => {
    console.log(response);
    return response.json();
}).then(res => {
    console.log(res)
}).catch(err => {
    console.log(err);
})

整個請求過程分成兩個部分,第一部分根據(jù)對應(yīng)的request進行請求,默認(rèn)是get,如果請求正確,會返回一個response,包含了請求的一些信息,狀態(tài)等,然后會返回一個返回一個新的Promise對象,在第二個then中獲取對應(yīng)的json,catch還是捕獲異常

2.Headers

這個主要是設(shè)置請求頭,都是對請求頭添加字段,都是對請求頭進行操作,增刪改遍歷等

var myHeaders = new Headers();
myHeaders.append('Content-Type', 'text/xml');
myHeaders.append('Accept-Encoding', 'deflate');
myHeaders.append('Content-Type', 'image/gif');
console.log(myHeaders.get('Content-Type'));
console.log(myHeaders)
for (var item of myHeaders.entries()){
    console.log(item);
}

append添加鍵值對,但是直接打印Headers對象是沒有辦法看見添加的鍵值對內(nèi)容的,只能通過get(),getAll(),entries()(迭代器)去找到對應(yīng)鍵值對內(nèi)容,set()就是修改,append()如果添加一個已經(jīng)存在的鍵值對,會繼續(xù)添加,不會覆蓋掉已有的,以一個數(shù)組的形式保存,Headers提供的方法還有values(),delete()等,都是對鍵值對操作的方法,原型上還有forEach()

3.Request

設(shè)置完頭部,需要同請求一同發(fā)送給服務(wù)器,就需要設(shè)置request.Request的構(gòu)造函數(shù)需要兩個參數(shù),第一個參數(shù)可以是一個請求的URL,第二個參數(shù)可選的,請求的一寫參數(shù)都可以進行設(shè)置
1.method:請求方式,GET,POST,默認(rèn)是GET
2.headers:請求頭,可以是Headers對象,也可以是json對象
3.cache:設(shè)置緩存方式,有幾個值,默認(rèn)是default,如果內(nèi)容沒變就從緩存里讀取,如果有變化,請求,并且更新緩存.reload:是不查看緩存,直接請求.no-store:直接請求,并且不更新緩存.
4.mode:設(shè)置請求的模式,默認(rèn)是cors,還能設(shè)置same-origin或者navigate
5.body:post請求設(shè)置的body體

var requestInit = {
    headers: myHeaders,
    cache: 'no-cache',
    method: 'POST',
    body: 'test=123&name=Tony'
}
var request = new Request("fetch.php", requestInit);

4.Response

在第一個then里打印請求返回回來的response對象


response對象

里面有很多參數(shù),比如狀態(tài)碼,url等基本狀態(tài)參數(shù),但是沒有辦法獲取到請求回來的數(shù)據(jù),如果是json的話,可以使用response.json(),這個函數(shù)會返回一個新的promise,才能促成鏈?zhǔn)綄懛?除了json(),還有blob(),可以獲取圖片等.
到了第二步的then,使用上一步返回的promise對象,獲取到前一步的結(jié)果,這個結(jié)果直接就是一個json對象,對數(shù)據(jù)的處理就可以進行了,如果整個過程報錯,會在catch捕獲
fetch整個過程簡單,方便,只要是明白promise就能知道對應(yīng)流程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • JavaScript 通過XMLHttpRequest(XHR)來執(zhí)行異步請求,這個方式已經(jīng)存在了很長一段時間。雖...
    Bruce_zhuan閱讀 2,551評論 1 10
  • Fetch概念 fetch身為H5中的一個新對象,他的誕生,是為了取代ajax的存在而出現(xiàn),主要目的僅僅只是為了結(jié)...
    種諤閱讀 3,213評論 1 12
  • 前言 React Native可以使用多種方式來進行網(wǎng)絡(luò)請求,比如fetch、XMLHttpRequest以及基于...
    劉望舒閱讀 1,849評論 4 4
  • 導(dǎo)讀 傳遞信息到服務(wù)器,從服務(wù)器獲取信息,是前端發(fā)展的重中之重,尤其是現(xiàn)在前后端分離的大前提下,前后端的數(shù)據(jù)交互是...
    Chris_dc閱讀 2,257評論 1 9

友情鏈接更多精彩內(nèi)容