当前位置: 代码网 > it编程>前端脚本>Vue.js > vue的axios使用post时必须使用qs.stringify而get不用问题

vue的axios使用post时必须使用qs.stringify而get不用问题

2024年05月19日 Vue.js 我要评论
问题vue里代码如下: this.$http.post('/getmatterlist.do',{"matterids":"1,2,3"}) .then((res)=>{

问题

vue里代码如下:

   this.$http.post('/getmatterlist.do',{"matterids":"1,2,3"})
     .then((res)=>{
        console.log(res);
   })

axios官方文档都这么示范的,仔细看下浏览器里发出去的请求

传送参数的形式不是form-data,而是request payload。

只要做两步设置就可以解决了

用qs.stringify()将对象序列化成url的形式,qs是axios里面自带的,所以直接引入就可以了

设置请求头里的’content-type’为’application/x-www-form-urlencoded’

   import qs from 'qs'
   var data = qs.stringify({"matterids":"1,2,3"});
   this.$http.post('/getmatterlist.do',data, {headers:{'content-type':'application/x-www-form-urlencoded'}}).then((res)=>{
        console.log(res)
   })

改完之后再来看下,问题已经解决了

原因

http请求中的get请求和post请求参数的存放位置是不一样的,get请求的参数以键值对的方式跟在url后面的,而post请求的参数是以键值对的方式在请求体里的

get请求

post请求

为何要设置请求头里的’content-type’

使用不同请求方式时,参数的传输方式是不一样的,但是服务端在取接口的请求参数时,用的方法其实却是一样的,都是使用request.getparameter(key)来获取,其实是因为tomcat在中间会对请求参数进行解析处理,处理完把解析出来的表单参数放在request parameter map中,所以后端就可以通过request.getparameter(key)来统一获取数据,而tomcat解析的时候是通过’contenttype’来知道当前的请求是post请求,当’contenttype’为"application/x-www-form-urlencoded",它才会去读取请求体数据。

为何要用qs.stringify()将对象序列化成url的形式:

post请求参数是以键值对的形式存在请求体里,用qs.stringify()就是把传入的对象转换为键值对。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com