详解Vue 开发模式下跨域问题


Posted in Javascript onJune 06, 2017

设置请求头部

  1. 后端设置请求头部Access-Control-Allow-Credentials: trueAccess-Control-Allow-Origin: www.xxx.com
  2. 前端post请求设置withCredentials=true
  3. 这里用了axios的请求数据方法代码如下:
import axios from 'axios'
import config from '../config'
export default {
request (method, uri, data, headerConfig = {withCredentials: true}) {
if (!method) {
 console.error('API function call requires method argument')
 return
}

if (!uri) {
 console.error('API function call requires uri argument')
 return
}

let url = config.serverURI + uri

return axios({ method, url, data, ...headerConfig })
}
}

jQuery的$.ajax::

$.ajax({
type: "POST",
url: "http://www.xxx.com/api.php",
dataType: 'json',
xhrFields: {
  withCredentials: true
},
crossDomain: true
}).then((json) => {
// balabala...
})

使用nodejs做代理

  1. 上面的那种方法需要后端配合设置头部,对于我这种前端小白来讲,联调时各种不成功的报错也无从解决,所以个人比较倾向于下面这种做法,鉴于使用脚手架vue-cli创建的项目,作者已经给我提供好了解决的方法。
  2. 找到项目文件夹下的config/index.js, 里面有一行proxyTable: {}, 这里就是作者为我们留的接口, 我们添加代理规则进去
var path = require('path')
module.exports = {
build: {
env: require('./prod.env'),
index: path.resolve(__dirname, '../xxx/index.html'),
assetsRoot: path.resolve(__dirname, '../xxx'),
assetsSubDirectory: 'static',
assetsPublicPath: '/',
productionSourceMap: true,
productionGzip: false,
productionGzipExtensions: ['js', 'css']
},
dev: {
env: require('./dev.env'),
port: 8080,
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {
 '/api': {
  target: 'http://www.xxx.com/api.php/',
  changeOrigin: true,
  pathRewrite: {
   '^/api': '/'
  }
 }
},
cssSourceMap: false
}
}

这里target为目标域名,pathRewrite为转换规则,请求数据时将接口地址 根据转换规则请求就可以解决跨域啦!(这里也可以配置headers,设置cookis,token等)

jsonp

jsonp也是一种解决跨域的方法,不过我从来没有用过,在网上查了下资料,jsonp的原理是script标签引入js是不受域名限制的, 由于是模拟插入script标签, 所以不可以用post请求。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
理解JavaScript中的事件
Sep 23 Javascript
javascript 面向对象编程 万物皆对象
Sep 17 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
May 26 Javascript
阻止子元素继承父元素事件具体思路及实现
May 02 Javascript
jQuery自动完成插件completer附源码下载
Jan 04 Javascript
ES6中Math对象的部分扩展
Feb 20 Javascript
vue使用axios跨域请求数据问题详解
Oct 18 Javascript
利用10行js代码实现上下滚动公告效果
Dec 08 Javascript
微信小程序实现动态设置placeholder提示文字及按钮选中/取消状态的方法
Dec 14 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
Mar 15 Javascript
vue todo-list组件发布到npm上的方法
Apr 04 Javascript
利用React Router4实现的服务端直出渲染(SSR)
Jan 07 Javascript
JS实现经典的中国地区三级联动下拉菜单功能实例【测试可用】
Jun 06 #Javascript
深入理解vue-loader如何使用
Jun 06 #Javascript
利用webstrom调试Vue.js单页面程序的方法教程
Jun 06 #Javascript
JavaScript实现一个空中避难的小游戏
Jun 06 #Javascript
vue脚手架vue-cli的学习使用教程
Jun 06 #Javascript
D3.js进阶系列之CSV表格文件的读取详解
Jun 06 #Javascript
JavaScript实现移动端轮播效果
Jun 06 #Javascript
You might like
php返回当前日期或者指定日期是周几
2015/05/21 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
javascript 打印内容方法小结
2009/11/04 Javascript
jQuery LigerUI 使用教程入门篇
2012/01/18 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
2016/10/10 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
Angular6新特性之Angular Material
2018/12/28 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
2019/10/10 jQuery
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
[03:09]DOTA2亚洲邀请赛 LGD战队出场宣传片
2015/02/07 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
使用Python操作Elasticsearch数据索引的教程
2015/04/08 Python
解决Python 遍历字典时删除元素报异常的问题
2016/09/11 Python
python操作列表的函数使用代码详解
2017/12/28 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
详解html2canvas截图不能截取圆角图片的解决方案
2018/01/30 HTML / CSS
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
为什么使用接口?
2014/08/13 面试题
优秀毕业生推荐信
2013/11/02 职场文书
普通员工辞职信
2014/01/17 职场文书
年度考核自我评价
2014/01/25 职场文书
《望洞庭》教学反思
2014/02/16 职场文书
初中家长寄语
2014/04/02 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
幼儿园毕业致辞
2015/07/29 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android