Vue中axios跨域问题

Vue中axios跨域问题

1 axios跨域问题

今天遇到一个问题,在node里的Vue项目中使用axios时向tomcat下的javaweb项目发送请求,出现报错。’‘CROS policy 类似的错误’‘

在网上查了资料后发现大部分都是在webstorm ide下的解决方式。而我的是webpack初始化的结构模式,没有config文件夹,不能解决问题。发现在webpack.config.js中找到了相同的内容。在该文件下搜索proxy字段即可找到对应内容并修改。
在这里插入图片描述

具体的字段是这样的

proxy: {
      '/api/': {
        target: 'http://www.baidu.com/',    //修改你所要跨域的地址前缀
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''						//在Vue页面中axios内使用'/api/'代替前缀即可
        }
      }
    },

2 axios传参以及获取响应数据的问题

在axios内传参时,用字符串拼接的方式动态添加参数,常常会获取不到页面,甚至产生503错误。

后来解决了这个报错,其中是axios在使用url时动态拼接造成的,

后来在axios内的params类型中填写自己要添加的参数即可。

如:

function sent(tree){
axios({
				method: 'get',
				url: '/test.jsp',
				params: {
					 id :  NumberOne,     //在此处定义并传递参数,此例会转为"/api/test.jsp?id=NumberOne"的地址
				},
				responseType:'json'
				}).then((res) => {
					console.log(res.data);
					this.tempData = res.data;
				}).catch((err) => {
					console.log(err)
				});
}

3 axios的同一函数内的对象无法传值问题

在axios中无法向外部传值,即在

var m;

...

	axios.then((res)==>{

	m = res.data;

})

...
console.log(m);
return m;

会发生报错

报错m为undefined

解决方法:

在vue定义范围内新定义一个data ,在return中定义该变量即可。

如:

data() {
			return {
				html:'',
				tableData1: [],
				tempData: '',			//获取axios接收的数据,在需要使用的地方,
				input1:'',
				input2:'',
				input3:'',
				input4:'',
			}
		}

小结

ajax、axios 归根到底是互联网通信协议中的一种,并且核心仍然是hhtp协议。只是添加了一些额外的功能。因此在服务端中,用正常的协议(http协议)来对接即可。ps(要说明一下,jsp其实相当于一个另类的servlet,如果你需要重写jsp页面美化为html页面,而且系统不支持spring boot的模式,或者后台代码太多不想修改,建议你可以用axios或者ajax来请求该jsp页面,只需要在jsp中修改返回的数据即可。相信用这个方法的人跟我一样被老板强迫后端做前端的, o(一︿一+)o )

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高浮雕时

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值