Vue项目中跨域的几种方式

经常使用vue + webpack搭建项目,但在请求某些json数据时存在跨域问题,此时有几种修改方法

1. 修改后台header, 但如果只是请求外部数据,是没法修改后台配置的

1 header('Access-Control-Allow-Origin:*');//允许所有来源访问 
2 header('Access-Control-Allow-Method:POST,GET');//允许访问的方式

 

2. 修改webpack配置 , 这是使用webpack选项devServer的代理功能 proxy

1 proxyTable: { 
2   '/api': { 
3     target: '填写请求源地址', //源地址 
4     changeOrigin: true, //是否跨域
5     pathRewrite: { 
6       '^/api': '' //路径重写 
7       } 
8   } 
9 }

注意:如果不设置pathRewrite则可能会出现以上报错

另外:proxyTable是在vue-cli2.0项目中config/index.js配置好的选项, 实际上它指向build/webpack.dev.config.js中的devServer.proxy

在新版的@vue/cli中(即vue-cli3.0)没有直接暴露出webpack的配置,只需在根目录下自行创建vue.config.js然后配置如下

 1 module.exports = {
 2     devServer: {
 3     proxy: {
 4         '/api': {
 5         target: '填写请求源地址',
 6         ws: true,
 7         changeOrigin: true,
 8                 pathRewrite: {
 9                    '^/api': ''
10                 }
11         }
12     }
13      }
14 }        

最后一般在组件中使用axios或者fetch请求本地服务即可,此时外部数据已经被转到了本地服务器中

1 axios.get('/api/xxx')
2   .then(res => {
3       console.log(res)
4   })
5   .catch(err => {
6       console.log(err)
7 })
 1 fetch('/api/xxx', {
 2   method: 'GET',
 3   headers: {
 4       'content-type': 'application/json'
 5   },
 6   mode: 'no-cors'
 7   })
 8   .then(res => res.json())
 9   .then(json => {
10       console.log(json)
11    })

 

3.使用jQuery的JSONP()

1 $.ajax({
2   url: '请求的源地址',
3   type: 'GET',
4   dataType: 'JSONP',
5   success(res) {
6      console.log(res)
7    }
8 })

 

转载于:https://www.cnblogs.com/hughes5135/p/10183445.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值