axios请求如何跨域

这次给大家带来axios请求如何跨域,axios请求跨域的注意事项有哪些,下面就是实战案例,一起来看一下。

vue-cli axios请求方式以及跨域处理

安装axios

cnpm install axios --save

登录后复制

在要使用axios的文件中引入axios

main.js文件 :import axios from 'axois'要发送请求的文件:import axios from 'axois'

登录后复制

在config/index.js文件设置代理

 dev: {     proxyTable: {// 输入/api 让其去访问http://localhost:3000/api   '/api':{       target:'http://localhost:3000'//设置调用的接口域名和端口号 ( 设置代理目标)   },   '/api/*':{    target:'http://localhost:3000'   },  changeOrigin: true,   pathRewrite: { //路径重写       '^/api': '/' //这里理解成用‘/api'代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://localhost:3002/user/add',直接写‘/api/goods/add'即可    }   }

登录后复制

    试一下,跨域成功,但是这知识开发环境(dev)中解决了跨域问题,生产环境中正真部署到服务器上如果是非同源还是存在跨域问题。

axios请求方式

Get请求

 // 向具有指定id的用户发出请求  axios.get('/user?id=1001')   .then(function (response) {    console.log(response.data);   }).catch(function (error) {    console.log(error);   });  // 也可以通过 params 对象传递参数  axios.get('/user', {    params: {     id: 1001    }   }).then(function (response) {//请求成功回调函数    console.log(response);   }).catch(function (error) {//请求失败时的回调函数    console.log(error);   });

登录后复制

post请求

  axios.post('/user', {    userId: '10001' //注意post请求发送参数的方式和get请求方式是有区别的   }).then(function (response) {    console.log(response);   }).catch(function (error) {    console.log(error);   });

登录后复制

补充:

vue中axios解决跨域问题和拦截器使用

1.vue中axios不支持vue.use()方式声明使用。 所以有两种方法可以解决这点:

第一种: 在main.js中引入axios,然后将其设置为vue原型链上的属性,这样在组件中就可以直接 this.axios使用了

import axios from 'axios';Vue.prototype.axios=axios;components:this.axios({    url:"a.xxx",    method:'post',    data:{      id:3,      name:'jack'    }  })  .then(function(res){    console.log(res);  })  .catch(function(err){    console.log(err);  }) }

登录后复制

这里需要注意一点,就是在axios中把请求到的数据 使用this复制给data是无效的,使用箭头函数可以解决。

1.vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://10.1.5.11:8080/xxx/duty?time=2017-07-07 14:57:22’,是要跨域的才可以访问的,如果直接访问会报 XMLHTTPRequest can not load http://10.1.5.11:8080/xxx/duty?time=2017-07-07 14:57:22′. Response to preflight request doesn’t pass access control….

为什么存在跨域问题?因为这是非同源互相通讯,具体可以自己去google了解,这里只需要在webpack配置一下proxyTable就OK了,在config中找到index.js如下 :

config/index.jsdev: {  proxyTable: {   '/api': {    target: 'http://10.1.5.11:8080/',//设置你调用的接口域名和端口号     changeOrigin: true,   //跨域    pathRewrite: {     '^/api': '/'     //这里理解成用‘/api'代替target里面的地址,后面组件中我们掉接口时直接用api代替 比如我要调用'http://10.1.5.11:8080/xxx/duty?time=2017-07-07 14:57:22',直接写‘/api/xxx/duty?time=2017-07-07 14:57:22'即可    }   }

登录后复制

跨域成功,但是这只是开发环境(dev)中解决了跨域问题,生产环境中真正部署到服务器上如果是非同源还是存在跨域问题,如我们部署的服务器端口是3001,需要前后端联调,第一步前端我们可以分生产production和开发development两种环境分别测试,在config/dev.env.js和prod.env.js里也就是开发/生产环境下分别配置一下请求的地址API_HOST,开发环境中我们用上面配置的代理地址api,生产环境下用正常的接口地址,所以这样配置,分别在config/dev.env.js和prod.env.js两个文件中进行以下配置。

config/dev.env.js:module.exports = merge(prodEnv, { NODE_ENV: '"development"',//开发环境 API_HOST:"/api/"})prod.env.jsmodule.exports = { NODE_ENV: '"production"',//生产环境 API_HOST:'"http://10.1.5.11:8080/"'}

登录后复制

当然不管是开发还是生产环境都可以直接请求http://10.1.5.11:8080//。配置好之后测试时程序会自动判断当前是开发还是生产环境,然后自动匹配API_HOST,我们在任何组件里都能用process.env.API_HOST来使用地址如:

instance.post(process.env.API_HOST+’user/login’, this.form)

然后第二步后端服务器配置一下cros跨域即可,就是access-control-allow-origin:*允许所有访问的意思。综上:开发的环境下我们前端可以自己配置个proxy代理就能跨域了,真正的生产环境下还需要后端的配合的。某大神说:此方法ie9及以下不好使,如果需要兼容,最好的办法是后端在服务器端口加个代理,效果类似开发时webpack的代理。

1.axios发送get post请求问题

 发送post请求时一般都要设置Content-Type,发送内容的类型,application/json指发送json对象但是要提前stringify一下。application/xxxx-form指发送?a=b&c=d格式,可以用qs的方法格式化一下,qs在安装axios后会自动安装,只需要组件里import一下即可。

const postData=JSON.stringify(this.formCustomer);'Content-Type':'application/json'}const postData=Qs.stringify(this.formCustomer);//过滤成?&=格式'Content-Type':'application/xxxx-form'}

登录后复制

1.拦截器的使用

 当我们访问某个地址页面时,有时会要求我们重新登录后再访问该页面,也就是身份认证失效了,如token丢失了,或者是token依然存在本地,但是却失效了,所以单单判断本地有没有token值不能解决问题。此时请求时服务器返回的是401错误,授权出错,也就是没有权利访问该页面。

 我们可以在发送所有请求之前和操作服务器响应数据之前对这种情况过滤。

// http request 请求拦截器,有token值则配置上token值axios.interceptors.request.use(  config => {    if (token) { // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了      config.headers.Authorization = token;    }    return config;  },  err => {    return Promise.reject(err);  });// http response 服务器响应拦截器,这里拦截401错误,并重新跳入登页重新获取tokenaxios.interceptors.response.use(  response => {    return response;  },  error => {    if (error.response) {      switch (error.response.status) {        case 401:          // 这里写清除token的代码          router.replace({            path: 'login',            query: {redirect: router.currentRoute.fullPath}  //登录成功后跳入浏览的当前页面          })      }    }    return Promise.reject(error.response.data)   });

登录后复制

下面看下

vue cli脚手架前端调后端数据接口时候的本地代理跨域问题,如我在本地localhost访问接口http://40.00.100.100:3002/是要跨域的,相当于浏览器设置了一到门槛,会报错XMLHTTPRequest can not load http://40.00.100.100:3002/. Response to preflight request doesn’t

pass access control…. 为什么跨域同源非同源自己去查吧,在webpack配置一下proxyTable就OK了,如下 config/index.js

dev: {  加入以下  proxyTable: {   '/api': {    target: 'http://40.00.100.100:3002/',//设置你调用的接口域名和端口号 别忘了加http    changeOrigin: true,    pathRewrite: {     '^/api': '/'        //这里理解成用‘/api'代替target里面的地址,        后面组件中我们掉接口时直接用api代替 比如我要调        用'http://40.00.100.100:3002/user/add',直接写‘/api/user/add'即可    }   }  }

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

分享页面后跳转回首页

在Vue中watch方法使用详解

以上就是axios请求如何跨域的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2766576.html

(0)
上一篇 2025年3月8日 11:17:21
下一篇 2025年3月8日 11:23:17

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • axios出现302状态码怎么处理

    这次给大家带来axios出现302状态码怎么处理,axios出现302状态码处理的注意事项有哪些,下面就是实战案例,一起来看一下。 比如说浏览器打开了一个单页面(SPA)应用,过了一段时间token(或者session)过期了,这个时候页面…

    编程技术 2025年3月8日
    200
  • Vue2路由导航与axios拦截器封装

    这次给大家带来Vue2路由导航与axios拦截器封装,Vue2路由导航与axios拦截器封装的注意事项有哪些,下面就是实战案例,一起来看一下。 1.写在前面 最近在学习Vue2,遇到有些页面请求数据需要用户登录权限、服务器响应不符预期的问题…

    编程技术 2025年3月8日
    200
  • 双击与单击事件冲突如何解决

    这次给大家带来双击与单击事件冲突如何解决,双击与单击事件冲突解决的注意事项有哪些,下面就是实战案例,一起来看一下。 在JS中代码中同一功能块中通常同时会用到单击、双击事件,但通常会遇到一个问题,就是在双击的时候即执行了一次双击事件,而且还执…

    编程技术 2025年3月8日
    200
  • vue-cli怎样做出跨域请求

    这次给大家带来vue-cli怎样做出跨域请求,vue-cli做出跨域请求的注意事项有哪些,下面就是实战案例,一起来看一下。 前端开发时,请求后台接口经常需要跨域,vue-cli实现跨域请求只需要打开config/index.js,修改如下内…

    编程技术 2025年3月8日
    200
  • vue 单页应用前端路由如何配置

    这次给大家带来vue 单页应用前端路由如何配置,vue 单页应用前端路由配置的注意事项有哪些,下面就是实战案例,一起来看一下。 写在前面:通常 SPA 中前端路由有2种实现方式: window.history location.hash 下…

    编程技术 2025年3月8日
    200
  • Angular2中如何使用Dom

    这次给大家带来Angular2中如何使用Dom,Angular2中使用Dom的注意事项有哪些,下面就是实战案例,一起来看一下。 前言 Angular2的设计目标本来就是要让浏览器和DOM独立。DOM是复杂的,因此使组件与它分离,会让我们的应…

    编程技术 2025年3月8日
    200
  • vue+axios做出登录请求拦截

    这次给大家带来vue+axios做出登录请求拦截,vue+axios做出登录请求拦截的注意事项有哪些,下面就是实战案例,一起来看一下。 当我们在做接口请求时,比如判断登录超时时候,通常是接口返回一个特定的错误码,那如果我们每个接口都去判断一…

    编程技术 2025年3月8日
    200
  • 怎样快速解决vue axios请求超时

    这次给大家带来怎样快速解决vue axios请求超时,解决vue axios请求超时的注意事项有哪些,下面就是实战案例,一起来看一下。 具体原因 最近公司在做一个项目, 服务端数据接口用的是Php输出的API, 有时候在调用的过程中会失败,…

    2025年3月8日 编程技术
    200
  • vue减少对服务器请求次数

    这次给大家带来vue减少对服务器请求次数,vue减少对服务器请求次数的注意事项有哪些,下面就是实战案例,一起来看一下。 VUE2.0中提供了一个keep-alive方法,可以用来缓存组件,避免多次加载相应的组件,减少性能的消耗。比如, 一个…

    编程技术 2025年3月8日
    200
  • Postman怎样模拟发送请求

    这次给大家带来Postman怎样模拟发送请求,Postman模拟发送请求的注意事项有哪些,下面就是实战案例,一起来看一下。 Postman模拟发送带token的请求方法 1)google浏览器中安装扩展程序Interceptor 2)Pos…

    2025年3月8日
    200

发表回复

登录后才能评论