详解vue axios用post提交的数据格式
vue框架推荐使用axios来发送ajax请求,之前我还写过来讲解如何在vue组件中使用axios。但之前做着玩用的都是get请求,现在我自己搭博客时使用了post方法,结果发现后台(node.js)完全拿不到前台传来的参数。后来进过一番探索,终于发现问题所在。 post提交数据的四种编码方式 1.application/x-www-form-urlencoded这应该是最常见的post编码方式,一般的表单提交默认以此方式提交。大部分服务器语言对这种方式都有很好的支持。在PHP中,可以用$_POST[“key”]的方式获取到key的值,在node中我们可以使用querystring中间件对参数进行分离 2.multipart/form-data这也是一种比较常见的post数据格式,我们用表单上传文件时,必须使form表单的enctype属性或者ajax的contentType参数等于multipart/form-data。使用这种编码格式时发送到后台的数据长得像这样子 --boundary开始,接着是内容描述信息,最后是字段具体内容。如果传输的是文件,还要包含文件名和文件类型信息 3.application/jsonaxios默认提交就是使用这种格式。如果使用这种编码方式,那么传递到后台的将是序列化后的json字符串。我们可以将application/json与application/x-www-form-urlencoded发送的数据进行比较 首先是application/json: 接着是application/x-www-form-urlencoded: 这里可以明显看出application/x-www-form-urlencoded上传到后台的数据是以key-value形式进行组织的,而application/json则直接是个json字符串。如果在处理application/json时后台还是采用对付application/x-www-form-urlencoded的方式将会产生问题。例如后台node.js依然采用之前对付application/x-www-form-urlencoded的方法,那么 这个时候再 4.text/xml剩下的一种编码格式是text/xml,这种格式我没有怎么使用过 解决方法 既然我们知道axios post方法默认使用application/json格式编码数据,那么解决方案就有两种,一是后台改变接收参数的方法,另一种则是将axios post方法的编码格式修改为application/x-www-form-urlencoded,这样就不需要后台做什么修改了。 先来看第一种解决方法 vue组件中,axios发送post请求的代码如下 {
console.log(res.data);
})
此时控制台Network Headers里面的信息是这样子的 后台接收数据需要依赖 这张截图中,发挥作用的代码仅仅是 接下来在路由中使用body-parser 这时,当前台发送post请求之后,后台控制台中就会打印出 这时,通过 这种方法比较简单,也不需要前台做过多修改,推荐使用这种方法。 第二种解决方法,具体操作如下 前端 {
console.log(res.data);
})
其中发挥关键作用的是headers与transformRequest。其中 这种方法明显就要比第一种麻烦一点,但不需要后台做过多处理。所以具体操作还是得根据实际情况决定。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |