ajax和axios眷蜈、fetch的區(qū)別

1.jQuery ajax

?$.ajax({

????????type:?'POST',

????????url:?url,

????????data:?data,

????????dataType:?dataType,

????????success:?function()?{},

????????error:?function()?{}

????});

傳統(tǒng) Ajax 指的是 XMLHttpRequest(XHR)剥纷, 最早出現(xiàn)的發(fā)送后端請求技術(shù)闺金,隸屬于原始js中拒课,核心使用XMLHttpRequest對象狼牺,多個請求之間如果有先后關(guān)系的話羡儿,就會出現(xiàn)回調(diào)地獄礼患。

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

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

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

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

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

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

PS:MVVM(Model-View-ViewModel), 源自于經(jīng)典的 Model–View–Controller(MVC)模式毁渗。MVVM 的出現(xiàn)促進(jìn)了 GUI 前端開發(fā)與后端業(yè)務(wù)邏輯的分離践磅,極大地提高了前端開發(fā)效率。MVVM 的核心是 ViewModel 層灸异,它就像是一個中轉(zhuǎn)站(value converter)府适,負(fù)責(zé)轉(zhuǎn)換 Model 中的數(shù)據(jù)對象來讓數(shù)據(jù)變得更容易管理和使用,該層向上與視圖層進(jìn)行雙向數(shù)據(jù)綁定肺樟,向下與 Model 層通過接口請求進(jìn)行數(shù)據(jù)交互檐春,起呈上啟下作用。View 層展現(xiàn)的不是 Model 層的數(shù)據(jù)么伯,而是 ViewModel 的數(shù)據(jù)疟暖,由 ViewModel 負(fù)責(zé)與 Model 層交互,這就完全解耦了 View 層和 Model 層蹦狂,這個解耦是至關(guān)重要的誓篱,它是前后端分離方案實(shí)施的最重要一環(huán)。

如下圖所示:

image.png

2.axios

???axios({

????????method:?'post',

????????url:?'/user/12345',

????????data:?{

????????????firstName:?'Fred',

????????????lastName:?'Flintstone'

????????}

????}).then(function(response)?{

????????console.log(response);

????}).catch(function(error)?{

????????console.log(error);

????});

Vue2.0之后凯楔,尤雨溪推薦大家用axios替換JQuery ajax窜骄,想必讓axios進(jìn)入了很多人的目光中。

axios 是一個基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端摆屯,本質(zhì)上也是對原生XHR的封裝邻遏,只不過它是Promise的實(shí)現(xiàn)版本,符合最新的ES規(guī)范虐骑,它本身具有以下特征:

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

2.支持 Promise API

3.客戶端支持防止CSRF

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

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

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

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

8.取消請求

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

PS:防止CSRF:就是讓你的每個請求都帶一個從cookie中拿到的key, 根據(jù)瀏覽器同源策略,假冒的網(wǎng)站是拿不到你cookie中得key的廷没,這樣糊饱,后臺就可以輕松辨別出這個請求是否是用戶在假冒網(wǎng)站上的誤導(dǎo)輸入,從而采取正確的策略颠黎。

3.fetch

??try?{

????????letresponse?=?awaitfetch(url);

????????letdata?=?response.json();

????????console.log(data);

????}?catch?(e)?{

????????console.log("Oops,?error",?e);

????}

fetch號稱是AJAX的替代品另锋,是在ES6出現(xiàn)的滞项,使用了ES6中的promise對象。Fetch是基于promise設(shè)計的夭坪。Fetch的代碼結(jié)構(gòu)比起ajax簡單多了文判,參數(shù)有點(diǎn)像jQuery ajax。但是室梅,一定記住fetch不是ajax的進(jìn)一步封裝戏仓,而是原生js,沒有使用XMLHttpRequest對象亡鼠。

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

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

2.更好更方便的寫法

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

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

1.語法簡潔,更加語義化2.基于標(biāo)準(zhǔn) Promise 實(shí)現(xiàn)钳幅,支持 async/await3.同構(gòu)方便物蝙,使用[isomorphic-fetch](https://github.com/matthew-andrews/isomorphic-fetch)4.更加底層,提供的API豐富(request,response)5.脫離了XHR敢艰,是ES規(guī)范里新的實(shí)現(xiàn)方式

最近在使用fetch的時候诬乞,也遇到了不少的問題:

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

例如:

1)fetch只對網(wǎng)絡(luò)請求報錯牡属,對400票堵,500都當(dāng)做成功的請求,服務(wù)器返回 400逮栅,500 錯誤碼時并不會 reject悴势,只有網(wǎng)絡(luò)錯誤這些導(dǎo)致請求不能完成時,fetch 才會被 reject措伐。

2)fetch默認(rèn)不會帶cookie特纤,需要添加配置項(xiàng): fetch(url,{credentials:'include'})3)fetch不支持abort,不支持超時控制侥加,使用setTimeout及Promise.reject的實(shí)現(xiàn)的超時控制并不能阻止請求過程繼續(xù)在后臺運(yùn)行捧存,造成了流量的浪費(fèi)4)fetch沒有辦法原生監(jiān)測請求的進(jìn)度,而XHR可以

總結(jié):axios既提供了并發(fā)的封裝,也沒有fetch的各種問題昔穴,而且體積也較小短蜕,當(dāng)之無愧現(xiàn)在最應(yīng)該選用的請求的方式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末傻咖,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子岖研,更是在濱河造成了極大的恐慌卿操,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孙援,死亡現(xiàn)場離奇詭異害淤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)拓售,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門窥摄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人础淤,你說我怎么就攤上這事崭放。” “怎么了鸽凶?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵币砂,是天一觀的道長。 經(jīng)常有香客問我玻侥,道長决摧,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任凑兰,我火速辦了婚禮掌桩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姑食。我一直安慰自己波岛,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布音半。 她就那樣靜靜地躺著盆色,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祟剔。 梳的紋絲不亂的頭發(fā)上隔躲,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機(jī)與錄音物延,去河邊找鬼宣旱。 笑死,一個胖子當(dāng)著我的面吹牛叛薯,可吹牛的內(nèi)容都是我干的浑吟。 我是一名探鬼主播笙纤,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼组力!你這毒婦竟也來了省容?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤燎字,失蹤者是張志新(化名)和其女友劉穎腥椒,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體候衍,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡笼蛛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛉鹿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片滨砍。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖妖异,靈堂內(nèi)的尸體忽然破棺而出惋戏,到底是詐尸還是另有隱情,我是刑警寧澤他膳,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布日川,位于F島的核電站,受9級特大地震影響矩乐,放射性物質(zhì)發(fā)生泄漏龄句。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一散罕、第九天 我趴在偏房一處隱蔽的房頂上張望分歇。 院中可真熱鬧,春花似錦欧漱、人聲如沸职抡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缚甩。三九已至,卻和暖如春窑邦,著一層夾襖步出監(jiān)牢的瞬間擅威,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工冈钦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留郊丛,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像厉熟,于是被迫代替她去往敵國和親导盅。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內(nèi)容