日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

ajax和fetch哪个好,axios和ajax,fetch的区别

發(fā)布時(shí)間:2025/3/11 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ajax和fetch哪个好,axios和ajax,fetch的区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1,傳統(tǒng) Ajax 指的是 XMLHttpRequest(XHR), 最早出現(xiàn)的發(fā)送后端請(qǐng)求技術(shù),隸屬于原始js中,核心使用XMLHttpRequest對(duì)象,多個(gè)請(qǐng)求之間如果有先后關(guān)系的話,就會(huì)出現(xiàn)回調(diào)地獄。

JQuery ajax 是對(duì)原生XHR的封裝,除此以外還增添了對(duì)JSONP的支持。經(jīng)過(guò)多年的更新維護(hù),真的已經(jīng)是非常的方便了,優(yōu)點(diǎn)無(wú)需多言;如果是硬要舉出幾個(gè)缺點(diǎn),那可能只有:

1.本身是針對(duì)MVC的編程,不符合現(xiàn)在前端MVVM的浪潮

2.基于原生的XHR開(kāi)發(fā),XHR本身的架構(gòu)不清晰。

3.JQuery整個(gè)項(xiàng)目太大,單純使用ajax卻要引入整個(gè)JQuery非常的不合理(采取個(gè)性化打包的方案又不能享受CDN服務(wù))

4.不符合關(guān)注分離(Separation of Concerns)的原則

5.配置和調(diào)用方式非常混亂,而且基于事件的異步模型不友好。

2.axios它本身具有以下特征:

1.從瀏覽器中創(chuàng)建 XMLHttpRequest

2.支持 Promise API

3.客戶端支持防止CSRF

4.提供了一些并發(fā)請(qǐng)求的接口(重要,方便了很多的操作)

5.從 node.js 創(chuàng)建 http 請(qǐng)求

6.攔截請(qǐng)求和響應(yīng)

7.轉(zhuǎn)換請(qǐng)求和響應(yīng)數(shù)據(jù)

8.取消請(qǐng)求

9.自動(dòng)轉(zhuǎn)換JSON數(shù)據(jù)

3.fetch

fetch號(hào)稱是AJAX的替代品,是在ES6出現(xiàn)的,使用了ES6中的promise對(duì)象。Fetch是基于promise設(shè)計(jì)的。Fetch的代碼結(jié)構(gòu)比起ajax簡(jiǎn)單多了,參數(shù)有點(diǎn)像jQuery ajax。但是,一定記住fetch不是ajax的進(jìn)一步封裝,而是原生js,沒(méi)有使用XMLHttpRequest對(duì)象。

fetch的優(yōu)點(diǎn):

1.符合關(guān)注分離,沒(méi)有將輸入、輸出和用事件來(lái)跟蹤的狀態(tài)混雜在一個(gè)對(duì)象里

2.更好更方便的寫法

坦白說(shuō),上面的理由對(duì)我來(lái)說(shuō)完全沒(méi)有什么說(shuō)服力,因?yàn)椴还苁荍query還是Axios都已經(jīng)幫我們把xhr封裝的足夠好,使用起來(lái)也足夠方便,為什么我們還要花費(fèi)大力氣去學(xué)習(xí)fetch?

我認(rèn)為fetch的優(yōu)勢(shì)主要優(yōu)勢(shì)就是:

1. 語(yǔ)法簡(jiǎn)潔,更加語(yǔ)義化

2. 基于標(biāo)準(zhǔn) Promise 實(shí)現(xiàn),支持 async/await

3. 同構(gòu)方便,使用 [isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch)

4.更加底層,提供的API豐富(request, response)

5.脫離了XHR,是ES規(guī)范里新的實(shí)現(xiàn)方式

最近在使用fetch的時(shí)候,也遇到了不少的問(wèn)題:

fetch是一個(gè)低層次的API,你可以把它考慮成原生的XHR,所以使用起來(lái)并不是那么舒服,需要進(jìn)行封裝。

例如:

1)fetch只對(duì)網(wǎng)絡(luò)請(qǐng)求報(bào)錯(cuò),對(duì)400,500都當(dāng)做成功的請(qǐng)求,服務(wù)器返回 400,500 錯(cuò)誤碼時(shí)并不會(huì) reject,只有網(wǎng)絡(luò)錯(cuò)誤這些導(dǎo)致請(qǐng)求不能完成時(shí),fetch 才會(huì)被 reject。

2)fetch默認(rèn)不會(huì)帶cookie,需要添加配置項(xiàng): fetch(url, {credentials: 'include'})

3)fetch不支持abort,不支持超時(shí)控制,使用setTimeout及Promise.reject的實(shí)現(xiàn)的超時(shí)控制并不能阻止請(qǐng)求過(guò)程繼續(xù)在后臺(tái)運(yùn)行,造成了流量的浪費(fèi)

4)fetch沒(méi)有辦法原生監(jiān)測(cè)請(qǐng)求的進(jìn)度,而XHR可以

總結(jié)

以上是生活随笔為你收集整理的ajax和fetch哪个好,axios和ajax,fetch的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。