JavaScript   发布时间:2022-04-16  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了axios post提交formdata的实例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

vue框架推荐使用axios来发送ajax请求,之前我还写过

来讲解如何在vue组件中使用axios。但之前做着玩用的都是get请求,现在我自己搭博客时使用了post方法,结果发现后台(node.js)完全拿不到前台传来的参数。后来进过一番探索,终于发现问题所在。

BACkground-color: #ccffcc">

post提交数据的四种编码方式

1.application/x-www-form-urlencoded

这应该是最常见的post编码方式,一般的表单提交默认以此方式提交。大部分服务器语言对这种方式都有很好的支持。在php中,可以用$_POST[“key”]的方式获取到key的值,在Node中我们可以使用queryString中间件对参数进行分离

p.post("/server",function(req,res){ req.on("data",function(data){ let key=queryString.parse(decodeURIComponent(data)).key; console.log("queryString:"+key) }); }); @H_675_16@

2.multipart/form-data

这也是一种比较常见的post数据格式,我们用表单上传文件时,必须使form表单的enctype属性或者ajax的contentType参数等于multipart/form-data。使用这种编码格式时发送到后台的数据长得像这样子

axios post提交formdata的实例

不同字段以--boundary开始,接着是内容描述信息,最后是字段具体内容。如果传输的是文件,还要包含文件名和文件类型信息

3.application/json

axios默认提交就是使用这种格式。如果使用这种编码方式,那么传递到后台的将是序列化后的json字符串。我们可以将application/json与application/x-www-form-urlencoded发送的数据进行比较

首先是application/json:

axios post提交formdata的实例

接着是application/x-www-form-urlencoded:

axios post提交formdata的实例

这里可以明显看出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))之后得到的数据是这样子的

axios post提交formdata的实例

这个时候再queryString.parse(decodeURIComponent(data)).key只能获取到undefined

4.text/xml

剩下的一种编码格式是text/xml,这种格式我没有怎么使用过

BACkground-color: #ccffcc">

解决方法

既然我们知道axios post方法默认使用application/json格式编码数据,那么解决方案就有两种,一是后台改变接收参数的方法,另一种则是将axios post方法的编码格式修改为application/x-www-form-urlencoded,这样就不需要后台做什么修改了。

先来看第一种解决方法

vue组件中,axios发送post请求的代码如下

{ console.log(res.data); }) @H_675_16@

此时控制台Network Headers里面的信息是这样子的

axios post提交formdata的实例

后台接收数据需要依赖body-parser中间件,我们事先装好,接着在后台代码中引用body-parser

axios post提交formdata的实例

这张截图中,发挥作用的代码仅仅是const bodyParser=require("body-parser");

接下来在路由中使用body-parser

p.post("/api/haveUser",bodyParser.json(),res){ console.log(req.body); let haveUser=require("../api/server/user.js"); haveUser(req.body.name,req.body.password,res); }); @H_675_16@

这时,当前台发送post请求之后,后台控制台中就会打印出req.body

axios post提交formdata的实例

这时,通过req.body.name或者req.body.password就能拿到对应的值。

这种方法比较简单,也不需要前台做过多修改,推荐使用这种方法。

第二种解决方法,具体操作如下

前端

{ console.log(res.data); }) @H_675_16@

其中发挥关键作用的是headers与transformrequest。其中 headers 是设置即将被发送的自定义请求头。 transformrequest 允许在向服务器发送前,修改请求数据。这样操作之后,后台queryString.parse(decodeURIComponent(data))获取到的就是类似于{ name: 'w',password: 'w' }的对象。

后台代码如下

p.post("/api/haveUser",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); }); }); @H_675_16@

这种方法明显就要比第一种麻烦一点,但不需要后台做过多处理。所以具体操作还是得根据实际情况决定。

以上这篇axios post提交formdata的实例就是小编分享给大家的全部内容了,希望能给大家一个参,也希望大家多多支持菜鸟教程。

大佬总结

以上是大佬教程为你收集整理的axios post提交formdata的实例全部内容,希望文章能够帮你解决axios post提交formdata的实例所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:axiospost