【VUE axios】axios跨域方式

本文介绍如何在Vue项目中配置Axios进行跨域请求,并演示了如何通过代理实现跨域,同时展示了如何在PHP后端验证请求头信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、配置config下的index.js

proxyTable: {
        '/apis': {
            target: 'http://127.0.0.1:3000',
            changeOrigin: true,
            pathRewrite: {
                '^/apis': '/'
            }
        }
    },

2、在main中引入axios

import Vue from 'vue'
import App from './App'
import router from './router'
import axios from 'axios'
import querystring from 'querystring'

const FastClick = require('fastclick')
FastClick.attach(document.body)

Vue.config.productionTip = false

Vue.prototype.$axios = axios
axios.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded';

axios.interceptors.request.use(function (config) {
    if(config.method === "post"){
        config.data = querystring.stringify(config.data)
    }
    return config;
},function (error) {
    return Promise.reject(error);
});

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

3、在组件中使用

<template>
    <div>
        1、vue中axios跨域
        2、PHP后台验证header头信息
    </div>
</template>
<script>
    import querystring from 'querystring'
    export default {
        name: 'jsonp',
        created() {
            this.$axios({
                method: 'POST',
                url: '/apis/tencent/jsonp/index.php',
                data: {name: "zhangsan", id: '002'},
                headers: {'token': '12cDfdjD223'}
            }).then((data) => {
                console.log(data);
            }).catch(function (error) {
                console.log(error)
            })


//接口地址是127.0.0.1:3000/jsonp/index.php
//通过代理设置apis代表127.0.0.1
//于是接口地址/apis/json/index.php
            this.$axios.post('/apis/jsonp/index.php', {
                name: 'lisi',
                id: '003'
            }, {headers: {'token': 'fDDf5541'}})
                .then(function (data) {
                    console.log(data);
                }).catch(function (error) {
                console.log(error)
            })
        }
    }
</script>

4、PHP后台带接受Header头

注意,在PHP中所有的header中的自定义信息都会被加上HTTP_的开头,在获取的时候参数名称全部会转换成大写

<?php
$name = $_POST['name'];
$id = $_POST['id'];

if(isset($_SERVER['HTTP_TOKEN'])){
    $token = $_SERVER['HTTP_TOKEN'];
}else{
    $token = '';
}
//后端允许跨域配置
////指定允许其他域名访问
//header("Access-Control-Allow-Origin:*");
//// 响应类型
//header("Access-Control-Allow-Methods:POST,GET,PUT,DELETE,OPTIONS");
//// 响应头设置
//header("Access-Control-Allow-Headers:x-requested-with,content-type");

header("Content-Type:application/x-www-form-urlencoded,charset=utf-8");
if ($token != '') {
    $data = array(
        'name' => $name,
        'id' => $id,
        'token'=>$token,
        'msg' => "成功"
    );
    $jsondata = json_encode($data);
    echo $jsondata;
} else {
    $data = array(
        'msg' => '请求不合法'
    );
    $jsondata = json_encode($data);
    echo $jsondata;
}
?>

 

### 解决 Vue 中使用 Axios 请求的方法 在开发基于 Vue 的前端应用时,当通过 Axios 请求其他名下的 API 接口时会遇到浏览器同源策略限制所引发的问题。为了有效处理这一情况,可以采取如下几种方式: #### 一、服务器端设置 CORS 头部 最根本的做法是在目标服务器上配置允许来自特定或任意来源(即客户端)发出的 HTTP 请求。这通常涉及到修改 Web 应用程序所在的服务器响应头中的 `Access-Control-Allow-Origin` 字段[^1]。 #### 二、代理转发 对于本地开发环境而言,在项目根目录下创建或者编辑现有的 `vue.config.js` 文件,并添加代理规则来实现反向代理功能。这种方式能够使得所有的 `/api/*` 开始路径都被重定向到指定的目标 URL 上去,从而绕过了直接访问外部资源造成的障碍[^2]。 ```javascript module.exports = { devServer: { proxy: { '/api': { target: 'https://example.com', // 目标API的基础URL changeOrigin: true, pathRewrite: {'^/api' : ''} } } } } ``` #### 三、利用插件简化操作 如果不想频繁地手动引入 Axios 实例,则可以通过安装并注册全局组件的方式让整个应用程序都可以方便快捷地调用 `$http` 或者自定义名称的服务对象来进行网络通信。例如,在 Vue CLI 创建的应用里可通过安装 `vue-axios` 插件完成此目的;而在 Vite 构建工具环境下则有专门针对 Vue3 版本设计好的解决方案可供选择[^3]。 ```bash npm install axios vue-axios --save ``` ```javascript import { createApp } from 'vue'; import App from './App.vue'; import axios from 'axios'; import VueAxios from 'vue-axios'; const app = createApp(App); app.use(VueAxios, axios).mount('#app'); ``` 之后便可以在任何组件内部轻松发起带有默认配置项的异步请求了: ```javascript this.$axios.post('/api/login') .then(response => { console.log('登录成功:', response.data); }) .catch(error => { console.error('发生错误:', error); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值