前端請求基於ajax的時代已逐漸成為將要成為歷史了,es6的fetch和node的axios將會逐漸代替它,本篇博文將就這三者的區別做以比較方便對後兩者的理解和使用。
ajax
$.ajax(,
error: function () {}
});
axios
axios 是乙個基於 promise 的 http 庫,可以用在瀏覽器和 node.js 中。
瀏覽器中使用依然是xmlhttprequest物件。
axios(
}).then(function (response) )
.catch(function (error) );
axios 是乙個基於promise 用於瀏覽器和 nodejs 的 http 客戶端,本質上也是對原生xhr的封裝,只不過它是promise的實現版本,符合最新的es規範,它本身具有以下特徵:
從瀏覽器中建立 xmlhttprequest
支援 promise api
客戶端支援防止csrf
提供了一些併發請求的介面(重要,方便了很多的操作)
從 node.js 建立 http 請求
攔截請求和響應
轉換請求和響應資料
取消請求
自動轉換json資料
注意:防止csrf:就是讓你的每個請求都帶乙個從cookie中拿到的key, 根據瀏覽器同源策略,假冒的**是拿不到你cookie中得key的,這樣,後台就可以輕鬆辨別出這個請求是否是使用者在假冒**上的誤導輸入,從而採取正確的策略。
fetch
fetch是在es6出現的,使用了es6中的promise物件。fetch是基於promise設計的。fetch的**結構比起ajax簡單多了,引數有點像jquery ajax。但是,一定記住fetch不是ajax的進一步封裝,而是原生js,沒有使用xmlhttprequest物件。
try catch(e)
主要優勢就是:
語法簡潔,更加語義化
基於標準 promise 實現,支援 async/await
同構方便,使用
更加底層,提供的api豐富(request, response)
脫離了xhr,是es規範裡新的實現方式
fetch的不足之處:
fetch只對網路請求報錯,對400,500都當做成功的請求,伺服器返回 400,500 錯誤碼時並不會 reject,只有網路錯誤這些導致請求不能完成時,fetch 才會被 reject。
fetch預設不會帶cookie,需要新增配置項: fetch(url, )
fetch不支援abort,不支援超時控制,使用settimeout及promise.reject的實現的超時控制並不能阻止請求過程繼續在後台執行,造成了流量的浪費
fetch沒有辦法原生監測請求的進度,而xhr可以
另外還有跨域方案不成熟等。
jquery老邁笨拙,fetch年輕稚嫩,只有axios正當其年!
搞清楚LzoCodec和LzopCodec
使用lzo過程會發現它有兩種壓縮編碼可以使用,即lzocodec和lzopcodec,下面說說它們區別 lzocodec比lzopcodec更快,lzopcodec為了相容lzop程式新增了如bytes signature,header等資訊 如果使用 lzocodec作為reduce輸出,則輸出擴...
搞清楚陣列和指標
首先來看看幾個例子 int p a 指標陣列 int p b 陣列指標 int function int a 指標函式 int p int a 函式指標 int p a int a 函式指標陣列 在敘述陣列和指標的關係之前,先琢磨一下上面的五行 看你是否能一眼就看出來它們的確切含義。首先很關鍵的一點...
這一次徹底搞清楚閉包函式
閉包 closure 是函式式程式設計的重要的語法結構。函式式程式設計是一種程式設計正規化 而面向過程程式設計和物件導向程式設計也都是程式設計正規化 在面向過程程式設計中,我們見到過函式 function 在物件導向程式設計中,我們見過物件 object 函式和物件的根本目的是以某種邏輯方式組織 並...