Vue 项目中遇到的跨域问题及解决方法(后台php)

yizhihongxing

下面给出解决Vue项目中跨域问题的攻略。

1. 跨域问题的背景

在Vue项目中,由于前端代码和后端接口的部署位置不同,涉及到跨域访问的问题。如果没有任何处理,就会出现浏览器的同源策略限制,无法访问到后端接口。因此,需要对跨域问题进行处理。

2. 解决跨域问题的方法

2.1. 后端设置允许跨域访问

后端通过设置http响应头的内容,告知浏览器允许Vue项目的跨域访问。比如,下面的php代码设置了允许Vue项目跨域访问:

header('Access-Control-Allow-Origin: http://localhost:8080'); //允许指定域名访问
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE'); //允许的请求方法
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type'); //允许的请求头

需要注意的是,Access-Control-Allow-Origin头的值一定要明确指定Vue项目所在的地址,比如http://localhost:8080

2.2. 添加代理伺服器

如果后端无法或者不方便进行设置,我们可以通过添加代理服务器的方式,让浏览器访问代理服务器,代理服务器再去中转访问后端接口。这里以vue-cli4.x脚手架中的vue.config.js文件为例,展示一个常见的设置代理服务器的方式。

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:8888', //目标地址
        changeOrigin: true, //将主机头的原点更改为目标URL
        pathRewrite: {
          '^/api': '/' //重写路径
        }
      }
    }
  }
}

这里配置了一个代理服务器,将Vue项目中的/api开头的请求,代理转发到http://localhost:8888地址的后端接口中,实现了跨域访问的目的。需要注意的是,代理服务器的地址不一定非得和后端一致,只要保证能够代理到后端即可。

3. 示例说明

3.1. 示例1:后端设置允许跨域访问

后端接口代码如下:

<?php
header('Access-Control-Allow-Origin: http://localhost:8080');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE');
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type');

$data = array('name' => '张三', 'age' => 20);
echo json_encode($data);
?>

这里设置了跨域访问头,允许Vue项目跨域访问。然后在Vue项目中的代码如下:

export default {
  methods: {
    getData() {
      axios.get('http://localhost:8888/api/data.php')
        .then(response => {
          console.log(response.data)
        })
    }
  }
}

其中,axios是Vue项目中常用的ajax库,用于发送http请求。这里我们使用axios.get()方法,访问后端接口。由于已经设置了跨域访问头,加上我们使用了代理服务器,所以Vue项目和后端接口之间能够实现跨域访问。

3.2. 示例2:添加代理服务器

vue.config.js代码如下:

module.exports = {
  devServer: {
    proxy: {
      '/api': {
        target: 'http://localhost:8888',
        changeOrigin: true,
        pathRewrite: {
          '^/api': '/'
        }
      }
    }
  }
}

Vue项目中的代码如下:

export default {
  methods: {
    getData() {
      axios.get('/api/data.php')
        .then(response => {
          console.log(response.data)
        })
    }
  }
}

这里我们在Vue项目中的代码中,发送了一个请求/api/data.php,vue-cli脚手架会自动将这个请求代理到http://localhost:8888地址的后端接口中。代理服务器能够访问到后端接口,解决了跨域访问的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue 项目中遇到的跨域问题及解决方法(后台php) - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • vue3 中 computed 新用法示例小结

    下面是关于”vue3 中 computed 新用法示例小结”的完整攻略: 什么是 computed 在 Vue.js 中,我们可以通过计算属性来简化模板中的表达式,避免过多的逻辑计算,提高代码可维护性。computed 可以自动监听依赖变化,只有当依赖的值发生变化时,才会重新计算返回值。 在 Vue.js 3.0 中,computed 有了几个新的方法和特性…

    Vue 2023年5月28日
    00
  • vue中返回结果是promise的处理方式

    在Vue中,异步操作经常用Promise来实现。在处理异步操作的过程中,可能會遇到需要返回一个Promise对象的情形。本文将提供一种标准的处理Promise的方法,并给出两个实际的示例说明。 Promise是什么? Promise是一种异步操作的解决方案,它可以让异步操作更加简洁明了。Promise提供了一种可链式调用的方式,减少了回调嵌套的问题,增强了代…

    Vue 2023年5月27日
    00
  • vue-cli中实现响应式布局的方法

    当我们使用Vue-cli构建一个项目时,可以选择一些预设好的模板,比如使用vue-init webpack模板,就会得到一个默认的项目结构。我们可以在此基础上选择性的添加我们需要的库和工具,比如Sass﹑Stylus等CSS预处理器来实现响应式布局。 以下是一些实现响应式布局的方法: 1. 使用css@media查询 media queries是css3最强…

    Vue 2023年5月28日
    00
  • 强烈推荐!Vue3.2中的setup语法糖

    强烈推荐!Vue3.2中的setup语法糖 Vue3.2中新增了setup语法糖,它是Vue2.x中Options API的增强版,可以更加方便地编写逻辑代码,下面是对setup语法糖的详细讲解。 什么是setup语法糖 setup语法糖是Vue3.2中新增的语法,它是Vue2.x中Options API的增强版,它将Vue2.x中的部分组件选项提取出来,并…

    Vue 2023年5月27日
    00
  • vue 绑定使用 touchstart touchmove touchend解析

    下面是针对“Vue 绑定使用 touchstart touchmove touchend 解析”的解析攻略: 1. 什么是 touch 事件? Touch 事件是指通过触摸用户界面产生的事件,分为三个部分:touchstart、touchmove、touchend。通常用于移动设备上。 2. Vue 绑定 Touch 事件 在 Vue 实例上,可以通过 @t…

    Vue 2023年5月28日
    00
  • Vue2中配置Cesium全过程

    下面就详细讲解一下“Vue2中配置Cesium全过程”的完整攻略。 准备工作 在配置Vue2+ Cesium项目之前,需要先保证以下环境: 安装Node.js环境,并能够在终端使用Node和npm命令; 安装Vue CLI脚手架工具,可以运行下面的命令安装: npm install -g @vue/cli 安装完成后,可以通过运行 vue –version…

    Vue 2023年5月28日
    00
  • 用VueJS写一个Chrome浏览器插件的实现方法

    当我们要用VueJS编写Chrome浏览器插件时,需要考虑的主要问题是如何将VueJS代码与Chrome插件API集成。下面是实现步骤的完整攻略: 步骤一:创建一个新的Chrome插件 首先,我们需要在Chrome浏览器中创建一个新的Chrome插件项目,可以使用Chrome浏览器扩展程序模板代码来加速开发。这里以一个新标签页替换Chrome默认新标签页为案…

    Vue 2023年5月27日
    00
  • 详解Vue中watch的详细用法

    下面我就详细讲解一下“详解Vue中watch的详细用法”。 什么是watch 在Vue.js中,watch是一个非常有用的特性。他允许你在监测到数据的变化时做出相应的响应。watch可以监测一个特定的属性,如果这个属性的值发生变化,就会调用一段特定的函数。 watch的基本用法 下面,我们先来看一下watch的基本用法。在Vue实例中可以通过$watch方法…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部