Axios是一個基於Promise的 HTTP 庫,可以用在瀏覽器和node.js 中,因為尤大大的推薦,axios也變得越來越流行。最近項目中使用axios也遇到了一些問題,就借此機會總結一下,如有錯誤,還請不吝指正。
功能
瀏覽器端發起XMLHttpRequests請求
node層發起http請求
支持Promise API
攔截請求和響應
轉換請求和響應數據
取消請求
自動轉換JSON數據
客戶端支持防御XSRF(跨站請求偽造)
npm
npm install axios
bower
bower install axios
cdn
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
發起請求
GET
|
POST
|
注意事項
在使用GET方法傳遞參數時使用的是params,並且官方文檔中介紹為:params are the URL parameters to be sent with the request. Must be a plain object or a URLSearchParams object。譯為:params作為URL鏈接中的參數發送請求,且其必須是一個plain object或者是URLSearchParams object。plain object(純對象)是指用JSON形式定義的普通對象或者new Object()創建的簡單對象;而URLSearchParams object指的是一個可以由URLSearchParams接口定義的一些實用方法來處理 URL 的查詢字符串的對象,也就是說params傳參是以/user?ID=1&name=mike&sex=male形式傳遞的。
而在使用POST時對應的傳參使用的是data,data是作為請求體發送的,同樣使用這種形式的還有PUT,PATCH等請求方式。有一點需要注意的是,axios中POST的默認請求體類型為Content-Type:application/json(JSON規范流行),這也是最常見的請求體類型,也就是說使用的是序列化后的json格式字符串來傳遞參數,如:{ "name" : "mike", "sex" : "male" };同時,后台必須要以支持@RequestBody的形式接收參數,否則會出現前台傳參正確,后台接收不到的情況。
如果想要設置類型為Content-Type:application/x-www-form-urlencoded(瀏覽器原生支持),axios提供了兩種方式,如下:
瀏覽器端
|
不過,並不是所有瀏覽器都支持URLSearchParams,兼容性查詢caniuse.com,但是這里有一個Polyfill (polyfill:用於實現瀏覽器並不支持的原生API的代碼,可以模糊理解為補丁,同時要確保polyfill在全局環境中)。
或者,你也可以用qs這個庫來格式化數據。默認情況下在安裝完axios后就可以使用qs庫。
|
node層
在node環境中可以使用querystring。同樣,也可以用qs來格式化數據。
|
補充
常見的請求體類型還有一種方式,即multipart/form-data(瀏覽器原生支持),也就是提交表單數據常用的一種格式。和x-www-form-urlencoded對比起來,后者則是數據被編碼成以 '&' 分隔的鍵-值對, 同時以 '=' 分隔鍵和值。非字母或數字的字符會被Percent-encoding(URL encoding),這也就是為什么這種類型不支持二進制數據的原因 (應使用 multipart/form-data 代替)。