下面我就為大家分享一篇axios post提交formdata的實例,具有很好的參考價值,希望對大家有幫助。
vue框架推薦使用axios來傳送ajax請求,之前我還寫過一篇部落格來講解如何在vue元件中使用axios。但之前做著玩用的都是get請求,現在我自己搭部落格時使用了post方法,結果發現後台(node.js)完全拿不到前台傳來的參數。後來進過一番探索,終於發現問題所在。
post提交資料的四種編碼方式
#1.application/x-www-form-urlencoded
這應該是最常見的post編碼方式,一般的表單提交預設以此方式提交。大部分伺服器語言對這種方式都有很好的支援。在PHP中,可以用$_POST[“key”]的方式取得到key的值,在node中我們可以使用querystring中間件對參數進行分離
app.post("/server",function(req,res){ req.on("data",function(data){ let key=querystring.parse(decodeURIComponent(data)).key; console.log("querystring:"+key) }); });
#2.multipart/form-data
這也是比較常見的post資料格式,我們用表單上傳檔案時,必須讓form表單的enctype屬性或ajax的contentType參數等於multipart/form-data。使用這種編碼格式時發送到後台的資料長得像這樣子
不同欄位以--boundary開始,接著是內容描述訊息,最後是欄位具體內容。如果傳輸的是文件,還要包含文件名稱和文件類型資訊
3.application/json
axios預設提交就是使用這種格式。如果使用這種編碼方式,那麼傳遞到後台的將是序列化後的json字串。我們可以將application/json與application/x-www-form-urlencoded發送的資料進行比較
首先是application/json:
接著是application/x-www-form-urlencoded:
這裡可以明顯看出application/x-www-form-urlencoded上傳到後台的資料是以key-value形式進行組織的,而application/json則直接是個json字串。如果在處理application/json時後台還是採用對付application/x-www-form-urlencoded的方式將會產生問題。
例如後台node.js依然採用之前對付application/x-www-form-urlencoded的方法,那麼querystring.parse(decodeURIComponent(data))之後得到的資料就是這樣子的
#這時候再querystring.parse(decodeURIComponent(data)).key只能取得到undefined
4.text/xml
剩下的一種編碼格式是text/xml,這種格式我沒有怎麼使用過
#解決方法
##既然我們知道axios post方法預設使用application/json格式編碼數據,那麼解決方案就有兩種,一是後台改變接收參數的方法,另一種則是將axios post方法的編碼格式修改為application/x-www-form-urlencoded,這樣就不需要後台做什麼修改了。先來看第一個解決方法
vue元件中,axios傳送post請求的程式碼如下#
this.$axios({ method:"post", url:"/api/haveUser", data:{ name:this.name, password:this.password } }).then((res)=>{ console.log(res.data); })此時控制台Network Headers裡面的資訊是這樣子的
app.post("/api/haveUser",bodyParser.json(),function(req,res){ console.log(req.body); let haveUser=require("../api/server/user.js"); haveUser(req.body.name,req.body.password,res); });這時,目前台發送post請求之後,在後台控制台中就會印出req.body
第二種解決方法,具體運算如下
##
this.$axios({ method:"post", url:"/api/haveUser", headers:{ 'Content-type': 'application/x-www-form-urlencoded' }, data:{ name:this.name, password:this.password }, transformRequest: [function (data) { let ret = '' for (let it in data) { ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&' } return ret }], }).then((res)=>{ console.log(res.data); })
其中发挥关键作用的是headers与transformRequest。其中 headers 是设置即将被发送的自定义请求头。 transformRequest 允许在向服务器发送前,修改请求数据。这样操作之后,后台querystring.parse(decodeURIComponent(data))获取到的就是类似于{ name: 'w', password: 'w' }的对象。
后台代码如下
app.post("/api/haveUser",function(req,res){ let haveUser=require("../api/server/user.js"); req.on("data",function(data){ let name=querystring.parse(decodeURIComponent(data)).name; let password=querystring.parse(decodeURIComponent(data)).password; console.log(name,password) haveUser(name,password,res); }); });
这种方法明显就要比第一种麻烦一点,但不需要后台做过多处理。所以具体操作还是得根据实际情况决定。
上面是我整理给大家的,希望今后会对大家有帮助。
相关文章:
以上是axios post提交formdata的實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版