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

这次给大家带来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。使用这种编码格式时发送到后台的数据长得像这样子

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,这种格式我没有怎么使用过

解决方法

既然我们知道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里面的信息是这样子的

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

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

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

这张截图中,发挥作用的代码仅仅是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

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

这时,通过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); });});

登录后复制

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

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

echarts鼠标覆盖高亮显示节点关系数实现步骤

vue1与vue2获取dom元素步骤详解

以上就是axios+post方法提交formdata步骤详解的详细内容,更多请关注【创想鸟】其它相关文章!

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

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2762745.html

(0)
上一篇 2025年3月8日 10:00:01
下一篇 2025年3月8日 10:00:10

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 在vue里使用axios步骤详解

    这次给大家带来在vue里使用axios步骤详解,在vue里使用axios的注意事项有哪些,下面就是实战案例,一起来看一下。 通常情况下,我们搭建好的项目目录应该是这样子的 首先需要安装axios,这个会npm的都知道 下一步,在main.j…

    2025年3月8日 编程技术
    200
  • vue+axios表单中上传图片步骤详解

    这次给大家带来vue+axios表单中上传图片步骤详解,vue+axios表单中上传图片的注意事项有哪些,下面就是实战案例,一起来看一下。 然后问题就是element 中的上传控件在没有图片的时候是不会触发提交的,但接口写的是有file的 …

    编程技术 2025年3月8日
    200
  • vue实现图片与文件上传步骤详解

    这次给大家带来vue实现图片与文件上传步骤详解,vue实现图片与文件上传的注意事项有哪些,下面就是实战案例,一起来看一下。 html页面 //注意不能带括号 登录后复制 js代码 methods: {//上传图片onUpload(e){ v…

    2025年3月8日
    200
  • vue手机与邮箱正则验证步骤详解

    这次给大家带来vue手机与邮箱正则验证步骤详解,vue手机与邮箱正则验证的注意事项有哪些,下面就是实战案例,一起来看一下。 今天写了一个简单的验证,本来前面用的组件,但是感觉写的组件在此项目不是很好用,由于用到的地方比较少,所以直接写在了页…

    编程技术 2025年3月8日
    200
  • 树形控件修改iview步骤说明

    这次给大家带来树形控件修改iview步骤说明,树形控件修改iview的注意事项有哪些,下面就是实战案例,一起来看一下。 实现原理 修改了element-ui源码,把源码里面的tree模块提取出来 然后修改element自带checkbox等…

    2025年3月8日
    200
  • Vue项目内引入icon图标步骤详解

    这次给大家带来Vue项目内引入icon图标步骤详解,Vue项目内引入icon图标的注意事项有哪些,下面就是实战案例,一起来看一下。 1.下载icon图标,推荐icomoon网站,里面有大量的矢量图标,也可以自定义,当然你也可以去阿里巴巴矢量…

    2025年3月8日 编程技术
    200
  • vue项目打包传递至服务器步骤详解

    这次给大家带来vue项目打包传递至服务器步骤详解,vue项目打包传递至服务器的注意事项有哪些,下面就是实战案例,一起来看一下。 当我们将 vue 项目完成后,面临的就是如何将项目进行打包上线,放到服务器中。我使用的是 vue-cli(sim…

    2025年3月8日 编程技术
    200
  • vue-cli打包上线步骤详解

    这次给大家带来vue-cli打包上线步骤详解,vue-cli打包上线的注意事项有哪些,下面就是实战案例,一起来看一下。 以vue创建的官方例子为例子,我们在开发环境的时候会 npm run dev ,生成 而想要打包成一份很简单, 只需要 …

    2025年3月8日 编程技术
    200
  • Vue实现树形视图数据步骤详解

    这次给大家带来Vue实现树形视图数据步骤详解,Vue实现树形视图数据的注意事项有哪些,下面就是实战案例,一起来看一下。 这是模拟的树形图数据 let all={ name:’all’, children:{ A:{ name:’A’, ch…

    2025年3月8日 编程技术
    200
  • React Form组件封装步骤详解

    这次给大家带来React Form组件封装步骤详解,React Form组件封装的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 对于网页系统来说,表单提交是一种很常见的与用户交互的方式,比如提交订单的时候,需要输入收件人、手机号、…

    2025年3月8日
    200

发表回复

登录后才能评论