最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Axios指北

2023-04-13 10:53 作者:土衛(wèi)十三official  | 我要投稿

講道理還是fetch好用,SWR更是神奇。

Ajax

Asynchronous JavaScript + XML(異步 JavaScript 和 XML), 其本身不是一種新技術(shù),而是一個(gè)在 2005 年被 Jesse James Garrett 提出的新術(shù)語,用來描述一種使用現(xiàn)有技術(shù)集合的‘新’方法,包括:HTMLXHTML, CSS, JavaScript, DOM, XML (en-US), XSLT, 以及最重要的 XMLHttpRequest。當(dāng)使用結(jié)合了這些技術(shù)的 AJAX 模型以后,網(wǎng)頁應(yīng)用能夠快速地將增量更新呈現(xiàn)在用戶界面上,而不需要重載(刷新)整個(gè)頁面。這使得程序能夠更快地回應(yīng)用戶的操作。 -- MDN

Ajax有XMLHttpRequest和fetch兩種常用API,很多網(wǎng)站會混合這兩種方式進(jìn)行請求。

XMLHttpRequest API

一般的請求步驟:

  1. 新建XMLHttpRequest實(shí)例對象

  2. 調(diào)用open()方法,定義請求類型、URL、同步異步(在ajax中必須是異步)

  3. 調(diào)用send()方法,發(fā)送請求

  4. 接收服務(wù)端返回報(bào)文,處理返回?cái)?shù)據(jù)

reasystate是XMLHttpRequest實(shí)例的屬性,有01234五種取值

  • 0表示初始化

  • 1表示open方法調(diào)用完畢

  • 2表示send方法調(diào)用完畢

  • 3表示server端返回部分結(jié)果

  • 4表示server端返回結(jié)果接收完畢

xhr方法的缺點(diǎn):可能導(dǎo)致回調(diào)過多,代碼邏輯復(fù)雜混亂。axios基于xhr使用promise重新設(shè)計(jì)了API

fetch API

fetch使用Promise語法結(jié)構(gòu),返回一個(gè)Promise,可以使用async/await。代碼比原始的XHR簡潔。

fetch第一個(gè)參數(shù)接收一個(gè)request對象或URL字符串

第二個(gè)參數(shù)init接收一個(gè)自定義對象,詳細(xì)配置請求的各部分內(nèi)容,如method、header、referrer等

fetch方法的缺點(diǎn):沒有超時(shí)、abort、請求錯(cuò)誤需要自行判斷

Ajax跨域?qū)崿F(xiàn)——jsonp

一般不再使用此方法進(jìn)行跨域請求,這里只是記錄一下

一種非官方跨域數(shù)據(jù)交互協(xié)議,借助GET請求、script標(biāo)簽的src屬性可以進(jìn)行跨域請求的特性實(shí)現(xiàn)。

JSONP出現(xiàn)原因:根本原因在于瀏覽器的同源保護(hù)策略,網(wǎng)景公司提出的同源定義了只有當(dāng)協(xié)議、域名、端口都相同時(shí),兩個(gè)網(wǎng)頁才被視為同源,非同源的頁面間不能讀取DOM、cookie、indexdb、localstorage,不能發(fā)送Ajax請求,以防惡意頁面進(jìn)行數(shù)據(jù)竊取。而使用Ajax的大多數(shù)場景下,需要web頁面請求遠(yuǎn)端數(shù)據(jù),因此為了實(shí)現(xiàn)Ajax的跨域請求,JSONP被設(shè)計(jì)出來。

基本原理:服務(wù)端在請求中接收一個(gè)前端回調(diào)函數(shù)名,根據(jù)該函數(shù)名動態(tài)生成包含數(shù)據(jù)的js文件,交給前端執(zhí)行,前端執(zhí)行后得到結(jié)果數(shù)據(jù)。

例:

后端為了返回hello,可以返回:

此時(shí)web端接收到的返回內(nèi)容為

跨域?qū)崿F(xiàn)——CORS

跨源資源共享CORS,或通俗地譯為跨域資源共享)是一種基于 HTTP 頭的機(jī)制,該機(jī)制通過允許服務(wù)器標(biāo)示除了它自己以外的其他(域、協(xié)議或端口),使得瀏覽器允許這些源訪問加載自己的資源??缭促Y源共享還通過一種機(jī)制來檢查服務(wù)器是否會允許要發(fā)送的真實(shí)請求,該機(jī)制通過瀏覽器發(fā)起一個(gè)到服務(wù)器托管的跨源資源的“預(yù)檢”請求。在預(yù)檢中,瀏覽器發(fā)送的頭中標(biāo)示有 HTTP 方法和真實(shí)請求中會用到的頭。-- MDN

目前,通常使用服務(wù)端設(shè)置CORS響應(yīng)的方式進(jìn)行跨域請求。

CORS不會對所有類型的報(bào)文都進(jìn)行預(yù)檢,對于某些“簡單請求”(舊規(guī)范叫法,新規(guī)范棄用),簡單請求必須同時(shí)滿足以下條件:

  1. 使用GET/POST/HEAD方法

  2. 人為設(shè)置的標(biāo)頭字段都位于對CORS安全的標(biāo)頭字段集合中(僅人為設(shè)置了CORS允許設(shè)置的字段),集合:

    • text/plain

    • multipart/form-data

    • application/x-www-form-urlencoded

    • Accept

    • Accept-Language

    • Content-Language

    • Content-Type,其值僅限于:

    • Range,其值滿足簡單的范圍標(biāo)頭值

  3. 如果跨域請求由XMLHttpRequest對象發(fā)出,則要求其實(shí)例的upload屬性上未設(shè)置事件監(jiān)聽器(即xhr.upload.addEventListener()未調(diào)用)

  4. 請求中未使用ReadableStream對象

不同時(shí)滿足上述要求的請求則需要執(zhí)行預(yù)檢請求,瀏覽器會使用OPTIONS方法發(fā)起預(yù)檢請求(OPTIONS方法用于獲取目的資源所支持的通信選項(xiàng),如服務(wù)器支持的請求方法、CORS預(yù)檢等)

Axios API基礎(chǔ)

?

Axios Config

從上述內(nèi)容可知,axios的請求主體部分位于request config中,config詳細(xì)構(gòu)造如下:

攔截器

攔截器可以在請求前和響應(yīng)后對結(jié)果進(jìn)行攔截處理

?

取消請求

總結(jié)

?能看懂別的項(xiàng)目里面使用的axios就行了,還是fetch好(

Axios指北的評論 (共 條)

分享到微博請遵守國家法律
潢川县| 合江县| 朝阳市| 罗源县| 张北县| 仪陇县| 贵港市| 黎川县| 凌海市| 香港 | 永和县| 临安市| 阳泉市| 乌拉特后旗| 句容市| 连南| 苍南县| 定远县| 开远市| 林西县| 淄博市| 长武县| 泰顺县| 泸西县| 昭觉县| 新绛县| SHOW| 伊吾县| 武强县| 西宁市| 皋兰县| 奎屯市| 西畴县| 洛宁县| 清原| 巴里| 武宁县| 陆河县| 筠连县| 石家庄市| 百色市|