问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

axios+post方法提交formdata步骤详解

发布网友 发布时间:2024-08-19 00:17

我来回答

1个回答

热心网友 时间:2024-08-21 14:36

这次给大家带来axios+post方法提交formdata步骤详解,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里面的信息是这样子的
后台接收数据需要依赖body-parser中间件,我们事先装好,接着在后台代码中引用body-parser
这张截图中,发挥作用的代码仅仅是const bodyParser=require("body-parser");
接下来在路由中使用body-parser
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
这时,通过req.body.name或者req.body.password就能拿到对应的值。
这种方法比较简单,也不需要前台做过多修改,推荐使用这种方法。
第二种解决方法,具体操作如下
前端
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); });});
这种方法明显就要比第一种麻烦一点,但不需要后台做过多处理。所以具体操作还是得根据实际情况决定。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人大政协辅助岗是什么 政务辅助人员是干什么 政府辅助人员是什么 努比亚的海拔什么意思 北非努比亚现在怎么样了啊 相邻权的相关法律 梦见老公离世了什么预兆 梦见自己老公走掉 你出轨后 怎么操作才没被发现? 评评怎么造句 甲虫的特点是什么 甲虫的生活特点是什么? 如何查看自己家wifi的登录地址和密码? 怎样消除脸上的闭口粉刺? 安装arcgis9.3的问题 公园简笔画怎么画 有谁做过货轮船员,一般工资是多少?是那个公司?谢谢! ...的社保.为什么四险都是外阜农村劳动力啊?只有医保是外阜城镇职工... 如何用华为手机对另一部华为手机进行GPS定位呢? 如何查找另一部手机的位置 如何查找另一部华为手机的位置? 安卓手机怎么知道另一个手机的位置 怎么查另一台手机是不是在找我? 怎样才可以找到另一部手机呢? 波轮洗衣机安装需要水平吗? 方太油烟机风量28你看见了啊?你用过啊?能不能别在那瞎说,有证据再说吧... 方太油烟机的按键功能 美团网退款是退到银行卡里了么? 玫红色代表什么意义和象征 玫红色跟玫瑰红有区别吗 半路夫妻领证后一方先死亡 半路夫妻,财产均为男方财产,结婚证领完两个月,男方死亡,留下两个女儿... 男生对视时为什么躲开? 男生为什么不敢跟我对视? 一个我暗恋的男生 跟我眼神对视的时候会先定住一下然后马上躲开 是什... 灵隐寺求姻缘准吗,杭州灵隐寺求姻缘灵吗 苹果手机怎样修改自己的定位呢? 凉山自驾旅游攻略 苹果手机如何更改定位设置 哪个app可以看哑舍 中国移动网上营业厅广东 中国移动通信集团广东有限公司董事成员 长白山佛光是怎么回事 科学解释 华南城盛世广场交通方便吗?应该怎么过去? 苹果手机删除照片后为什么又会自动生成 广州海珠区离珠海吉林大学有多少公理? 过生日的场所选择受哪些因素影响? 从吉林大学珠海学院坐车到广州的天河区要多久?需要多少钱? 从广珠轻轨到吉林大学珠海学院,包的士要多少钱?或者说坐的士打表的_百... b站的号可以注册微信吗