解决在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 相关文章推荐
javascript 动态table添加colspan\rowspan 参数的方法
Jul 25 Javascript
js对象的构造和继承实现代码
Dec 05 Javascript
JS验证邮箱格式是否正确的代码
Dec 05 Javascript
点击button获取text内容并改变样式的js实现
Sep 09 Javascript
js实现鼠标点击文本框自动选中内容的方法
Aug 20 Javascript
javascript字符串替换函数如何一次性全部替换掉
Oct 30 Javascript
jQuery判断浏览器并动态调整select宽度的方法
Mar 02 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
Nov 21 Javascript
jQuery 出现Cannot read property ‘msie’ of undefined错误的解决方法
Nov 23 Javascript
浅谈Vue.nextTick 的实现方法
Oct 25 Javascript
vue中添加与删除关键字搜索功能
Oct 12 Javascript
使用js原生实现年份轮播选择效果实例
Jan 12 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数据库连接类~~做成一个分页类!
2006/11/25 PHP
PHP通过API获取手机号码归属地
2015/05/28 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
php可变长参数处理函数详解
2017/02/22 PHP
动态加载js文件 document.createElement
2006/10/14 Javascript
jQuery 点击图片跳转上一张或下一张功能的实现代码
2010/03/12 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
常见表单重复提交问题整理及解决方法
2013/11/13 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
Jquery 全选反选实例代码
2015/11/19 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
js模拟微博发布消息
2017/02/23 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
2017/08/03 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
Django ModelForm组件使用方法详解
2019/07/23 Python
python 如何将office文件转换为PDF
2020/09/22 Python
Python numpy大矩阵运算内存不足如何解决
2020/11/19 Python
Python项目实战之使用Django框架实现支付宝付款功能
2021/02/23 Python
css实例教程 一款纯css3实现的超炫动画背画特效
2014/11/05 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
泰国时尚电商:POMELO Fashion
2020/03/11 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
分厂厂长岗位职责
2013/12/29 职场文书
小学开学标语
2014/07/01 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
给老婆的检讨书
2015/01/27 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书