Vue中使用Axios进行POST数据发生的参数问题和跨域问题
我在一个Vue的组件中定义了一个模拟的登录请求。我提前将登录的用户名与密码定义在了data下的userinfo中。
以下是定义的代码片段:
import axios from 'axios'
export default {
name:'MainViews',
data () {
return {
userinfo:{
username:'admin',
password:'wt_adam110'
}
}
},
created () {
this._getuser ()
},
methods: {
_getuser () {
axios({
method: 'post',
url: '/apis/jxue/a/login',
data: postData,
headers: {
'Content-Type':'application/x-www-form-urlencoded'
}
}).then((res)=>{
console.log(res);
})
}
}
}
完成以上模拟之后,在控制台上给我打出来了结果:
这个结果提示是:用户名密码错误
。(我模拟中的数据是正确的用户名和密码)
然后经过我的问题查询之后,说是我POST的数据也许没有序列化,后台可能是无法识别。根据网上大部分的解决方案,是用过Qs.stringfy()这个方法进行一下小改动。
然后我就安装了npm install qs --save
。
并且在当前的文件中 import qs from 'qs'
,对局部代码进行了修改:
_getuser () {
let postData = {username:'admin',password:'wt_adam110'} //这条语句是我怕我下面的写法不正确,单独写了个简单的变量。但是发现还是不好用。
axios({
method: 'post',
url: '/apis/jxue/a/login',
data: qs.stringify(this.userinfo),// 主要是这里
headers: {
'Content-Type':'application/x-www-form-urlencoded'
}
}).then((res)=>{
console.log(res);
})
}
这时再刷新页面,给我返回的结果是:
跨域问题的报错
在config/index.js中,我已经做了跨域处理。(我接口的服务器在我局域网中的另一台机器上。)
proxyTable: {
'/apis': {
target: 'http://192.168.31.177:8080', // 接口的域名
// secure: true, // 如果是https接口,需要配置这个参数
changeOrigin: true, // 如果接口跨域,需要进行这个参数配置
pathRewrite: {
'^/apis': '' // 重写数据路径配置
}
}
}
整个情况就是这样,我有2个问题:
- 为什么我POST的数据无法返回正常的数据,是我请求时数据就有问题么?怎么解决?
- 为什么在我更改POST参数的格式后,又产生了跨域问题?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
1.你在header了加了
'Content-Type':'application/x-www-form-urlencoded'
说明你提交的数据类型是form格式的,但是你第一次提交的时候是一个对象的格式2.一般提交的格式json格式,用JSON.stringify(data)转换 一下,这个你需要和后端确定
3.跨域的问题可能是你的proxytable没生效,看看你浏览器里访问的接口的完整地址是啥