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

2020-06-13 06:01:40易采站长站整理

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的内容类型参数等于多部分/格式的数据。使用这种编码时格式到发送后台的数据长得像这样子 不同字段以开始,接着是内容描述信息,最后是字段具体内容。如果传输的是文件,还要包含文件名和文件类型信息

–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的方法,那么之后得到的数据的英文这样子的 这个时候再只能电子杂志到未定义

querystring.parse(decodeURIComponent(data))

querystring.parse(decodeURIComponent(data)).key

4.text / XML

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

解决方法

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