摘要:最近項目中使用也遇到了一些問題,就借此機會總結一下,如有錯誤,還請不吝指正。而在使用時對應的傳參使用的是,是作為請求體發送的,同樣使用這種形式的還有等請求方式。層在環境中可以使用。
功能Axios是一個基于Promise的 HTTP 庫,可以用在瀏覽器和node.js 中,因為尤大大的推薦,axios也變得越來越流行。最近項目中使用axios也遇到了一些問題,就借此機會總結一下,如有錯誤,還請不吝指正。
瀏覽器端發起XMLHttpRequests請求
node層發起http請求
支持Promise API
攔截請求和響應
轉換請求和響應數據
取消請求
自動轉換JSON數據
客戶端支持防御XSRF(跨站請求偽造)
兼容 使用npm
npm install axios
bower
bower install axios
cdn
GET發起請求
axios.get("/user?ID=123") .then( res => { // 請求數據成功并返回數據。 console.info(res) }).catch( e => { if(e.response){ //請求已發出,服務器返回狀態碼不是2xx。 console.info(e.response.data) console.info(e.response.status) console.info(e.response.headers) }else if(e.request){ // 請求已發出,但沒有收到響應 // e.request 在瀏覽器里是一個XMLHttpRequest實例, // 在node中是一個http.ClientRequest實例 console.info(e.request) }else{ //發送請求時異常,捕捉到錯誤 console.info("error",e.message) } console.info(e.config) }) // 等同以下寫法 axios({ url: "/user", method: "GET", params: { ID: 123 } }).then( res => { console.info(res) }).catch( e => { console.info(e) })POST
axios.post("/user", { firstName: "Mike", lastName: "Allen" }).then( res => { console.info(res) }).catch( e => { console.info(e) }) // 等同以下寫法 axios({ url: "/user", method: "POST", data: { firstName: "Mike", lastName: "Allen" } }).then( res => { console.info(res) }).catch( e => { console.info(e) })注意事項
在使用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提供了兩種方式,如下:
瀏覽器端
const params = new URLSearchParams(); params.append("param1", "value1"); params.append("param2", "value2"); axios.post("/user", params);
不過,并不是所有瀏覽器都支持URLSearchParams,兼容性查詢caniuse.com,但是這里有一個Polyfill (polyfill:用于實現瀏覽器并不支持的原生API的代碼,可以模糊理解為補丁,同時要確保polyfill在全局環境中)。
或者,你也可以用qs這個庫來格式化數據。默認情況下在安裝完axios后就可以使用qs庫。
const qs = require("qs"); axios.post("/user", qs.stringify({"name":"mike"}));
node層
在node環境中可以使用querystring。同樣,也可以用qs來格式化數據。
const querystring = require("querystring"); axios.post("http://something.com/", querystring.stringify({"name":"mike"}));補充
常見的請求體類型還有一種方式,即multipart/form-data(瀏覽器原生支持),也就是提交表單數據常用的一種格式。和x-www-form-urlencoded對比起來,后者則是數據被編碼成以 "&" 分隔的鍵-值對, 同時以 "=" 分隔鍵和值。非字母或數字的字符會被Percent-encoding(URL encoding),這也就是為什么這種類型不支持二進制數據的原因 (應使用 multipart/form-data 代替)。
END本文只是總結了axios中一些常用的知識點,也是本人平時在開發中遇到過的問題,所以還有些node層的應用以及其他使用場景沒有涉及到,更詳細的配置請移步axios官方文檔,另,推薦一篇翻譯不錯的中文文檔axios譯。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90071.html
摘要:前言用有一段時間了,從用搭建項目一步步配置,到之后的研究動效這些,一直想寫些東西記錄一下做個總結,剛好趁著有空就整理一下。結語有新的知識點會更新到知識體系中,總結和心得體會會單獨寫文章詳述,努力填坑 前言 用vue有一段時間了,從用vue-cli搭建項目、一步步配置axios、vuex、vue-router,到之后的研究canvas、動效這些,一直想寫些東西記錄一下、做個總結,剛好趁著...
摘要:一項目地址該項目的量只有,能不用的盡量別用,太費勁了。該問題解決方式如下的,這個解決來自,需要注意的是在以上的版本,需要替換成。與的解決辦法是在里加和里加變量,這個網上很多,就不贅述。不生成的公理類型必須設置為。 一.項目地址https://github.com/dfleischha...該項目的fork量只有2,能不用的盡量別用,太費勁了。二.marven踩坑1.Could not ...
摘要:在項目開始之前,不能心急立刻去搭建,需要設定幾個步驟來開展,接下來大概的說一下我從技術選型到項目前端搭建好的整個生命周期。開發該項目的底層的內容遠不止這些,但由于公司制度規定,只能大概的闡述了在從接手到選型到搭建完畢這到的過程的做法和思考。 前段時間部門要基于一個系統的基礎上開發一個管理平臺,于是我接手了該平臺的重活,因為上一個平臺我用了vue搭建,所以這次想用react來搭建。在項目...
摘要:學習成本很低,另外官方有比較完善的中文文檔。簡單本身是沒有錯誤,一個東西能以簡單的方式解決難道不好嗎關于這個中文文檔居然還有人噴那些喜歡用的是不是英文能力差,我就再報以呵呵一笑。本身擁有中文文檔就是一個優勢,結果還成了被噴的地方。 前言 由于這段時間工作上也是挺忙的,就沒有時間去寫這個項目,中間一直都是寫寫停停,進度也是非常慢的。正好前幾天都還比較空,就趕緊抓著空閑時間去寫這個項目,最...
閱讀 3149·2021-11-22 13:54
閱讀 3435·2021-11-15 11:37
閱讀 3598·2021-10-14 09:43
閱讀 3496·2021-09-09 11:52
閱讀 3595·2019-08-30 15:53
閱讀 2457·2019-08-30 13:50
閱讀 2054·2019-08-30 11:07
閱讀 884·2019-08-29 16:32