解决在Vue中使用axios用form表单出现的问题


Posted in Javascript onOctober 30, 2019

vue中使用Axios第三方库,采用形式提交,参数格式为multipart /格式数据 ,请求参数变为对象格式的解决办法。(推荐第二种方法)

提交数据的四种编码方式

一,应用/ X WWW的窗体-urlencoded

这应该是最常见的后编码方式,一般的表单提交默认以此方式提交。大部分服务器语言对这种方式都有很好的支持。在PHP中,可以用$ _ POST [“钥匙”]的方式获取到关键的值,在节点中我们可以使用查询字符串中间件对参数进行分离

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

2.multipart /格式数据

这也是一种比较常见的后数据格式,我们用表单上传文件时,必须使形式表单的加密类型属性或者AJAX的内容类型参数等于多部分/格式的数据。使用这种编码时格式到发送后台的数据长得像这样子 不同字段以开始,接着是内容描述信息,最后是字段具体内容。如果传输的是文件,还要包含文件名和文件类型信息

解决在Vue中使用axios用form表单出现的问题

--boundary

3.application / json

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

首先应用的英文/ JSON: 接着是应用程序/ x-WWW窗体-urlencoded: 这里可以明显看出应用程序/ x-WWW窗体-urlencoded上传到后台的数据是以键值形式进行组织的,而应用程序/ JSON则直接是个JSON字符串。如果在处理的应用程序/ JSON时后台还是采用对付应用程序/ x-WWW窗体-urlencoded的方式将会产生问题。例如后台的node.js依然采用之前对付应用程序/ x-WWW窗体-urlencoded的方法,那么之后得到的数据的英文这样子的 这个时候再只能电子杂志到未定义

解决在Vue中使用axios用form表单出现的问题

querystring.parse(decodeURIComponent(data))

解决在Vue中使用axios用form表单出现的问题

querystring.parse(decodeURIComponent(data)).key

4.text / XML

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

解决方法

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

先来看第一种解决方法

VUE组件中,爱可信发送后请求的代码如下

this.$axios({
 method:"post",
 url:"/api/haveUser",
 data:{
  name:this.name,
  password:this.password
 }
}).then((res)=>{
 console.log(res.data);
})

控制台此时标题网络里面的信息的英文这样子的 后台接收数据需要依赖中间件,我们事先装好,接着在后台代码中引用体解析器 这张截图中,作用英文发挥的代码仅仅的英文接下来在路由中使用身体解析器

解决在Vue中使用axios用form表单出现的问题

body-parser

解决在Vue中使用axios用form表单出现的问题

const bodyParser=require("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);
});

这时,当前台发送后请求之后,后台控制台就会中出打印这时,通过或者就能拿到对应的值。 这种方法比较简单,也不需要前台做过多修改,推荐使用这种方法。req.body

解决在Vue中使用axios用form表单出现的问题

req.body.namereq.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);
})

其中发挥关键作用的是标头与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);
  });
});

以上这篇解决在Vue中使用axios用form表单出现的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
跨浏览器的设置innerHTML方法
Sep 18 Javascript
网页和浏览器兼容性问题汇总(draft1)
Jun 01 Javascript
jquery选择器、属性设置用法经验总结
Sep 08 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
Jan 06 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
Sep 02 Javascript
简单谈谈JavaScript的同步与异步
Dec 31 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
Dec 20 Javascript
jQuery实现优雅的弹窗效果(6)
Feb 08 Javascript
Vue表单验证插件的制作过程
Apr 01 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
Jun 01 jQuery
JavaScript字符串处理常见操作方法小结
Nov 15 Javascript
微信小程序用户登录和登录态维护的实现
Dec 10 Javascript
vue路由 遍历生成复数router-link的例子
Oct 30 #Javascript
vue表单中遍历表单操作按钮的显示隐藏示例
Oct 30 #Javascript
vue遍历生成的输入框 绑定及修改值示例
Oct 30 #Javascript
微信小程序基于高德地图查找位置并显示文字
Oct 30 #Javascript
vue 实现cli3.0中使用proxy进行代理转发
Oct 30 #Javascript
vue cli3 配置proxy代理无效的解决
Oct 30 #Javascript
react quill中图片上传由默认转成base64改成上传到服务器的方法
Oct 30 #Javascript
You might like
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
php实现Mysql简易操作类
2015/10/11 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
JavaScript类库D
2010/10/24 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
JavaScript实现Java中Map容器的方法
2016/10/09 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
Node.js搭建小程序后台服务
2018/01/03 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
微信小程序冒泡事件及其阻止方法实例分析
2018/12/06 Javascript
微信小程序生成二维码的示例代码
2019/03/29 Javascript
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
python有证书的加密解密实现方法
2014/11/19 Python
python读写ini配置文件方法实例分析
2015/06/30 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
2018/01/07 Python
python实现一组典型数据格式转换
2018/12/15 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
2020/05/26 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
python制作抽奖程序代码详解
2021/01/15 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
网站性能延迟加载图像的五种技巧(小结)
2020/08/13 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
土建资料员岗位职责
2014/01/04 职场文书
施工资料员岗位职责
2014/01/06 职场文书
2014年元旦促销活动方案
2014/02/22 职场文书
精彩的广告词
2014/03/19 职场文书
中学教代会开幕词
2016/03/04 职场文书
MySQL去除重叠时间求时间差和的实现
2021/08/23 MySQL