最開(kāi)始簡(jiǎn)書(shū)的書(shū)友寫(xiě)過(guò)一篇文章锻弓,里面探討Fetch的解決方案《傳統(tǒng) Ajax 已死悍手,F(xiàn)etch 永生》
在筆者使用過(guò)程中發(fā)現(xiàn)了一些問(wèn)題证薇,這篇文章就是引用上面那篇文章做了一個(gè)補(bǔ)充
定義
首先看一下Fetch這個(gè)詞在MDN中的描述:
The Fetch API provides an interface for fetching resources (including across the network). It will seem familiar to anyone who has used XMLHttpRequest
, but the new API provides a more powerful and flexible feature set.
翻譯:Fetch API 提供了獲取資源(比如通過(guò)網(wǎng)絡(luò))的接口桥氏。對(duì)于使用過(guò) XMLHttpRequest
的人來(lái)說(shuō)應(yīng)該很熟悉,不過(guò)這個(gè)新的 API 提供了更加強(qiáng)大靈活的特性。
概念和用法
Fetch 提供了對(duì) Request
和 Response
(以及其他與網(wǎng)絡(luò)請(qǐng)求有關(guān)的)對(duì)象通用的定義夺溢。它之后能夠被使用到很多場(chǎng)景中:service workers、Cache API檐迟、其他處理請(qǐng)求和響應(yīng)的方式,甚至任何需要生成自己的響應(yīng)的方式。
它還提供了一種定義,將 CORS 和 HTTP 原生的頭信息結(jié)合起來(lái)诈皿,取代了原來(lái)那種分離的定義。
發(fā)送請(qǐng)求或者獲取資源像棘,需要使用 GlobalFetch.fetch
方法纫塌。它在很多接口中都被實(shí)現(xiàn)了,比如 Window
和 WorkerGlobalScope
讲弄。所以在各種環(huán)境中都可以用這個(gè)方法獲取到資源。
fetch()
必須接受一個(gè)參數(shù)——資源的路徑依痊。無(wú)論請(qǐng)求成功與否避除,它都返回一個(gè) promise 對(duì)象怎披,resolve 對(duì)應(yīng)請(qǐng)求的 Response
。你也可以傳一個(gè)可選的第二個(gè)參數(shù)—— init(參考
Request
)瓶摆。
一旦 Response
被返回凉逛,就有一些方法可以使用了,比如定義內(nèi)容或者處理方法(參考 Body
)群井。
你也可以通過(guò) Request()
和 Response()
的構(gòu)造函數(shù)直接創(chuàng)建請(qǐng)求和響應(yīng)状飞,但是我們不建議這么做。他們應(yīng)該被用于創(chuàng)建其他 API 的結(jié)果(比如书斜,service workers 中的 FetchEvent.respondWith
)诬辈。
但是因?yàn)槠鄳K的兼容性,讓這個(gè)東西用起來(lái)很困難
注意
- 首先Fetch是支持Async的荐吉,但是正確的寫(xiě)法很多網(wǎng)站上都有問(wèn)題焙糟,應(yīng)該如下
javascript
``