详解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实现表格排序方法
Jun 14 Javascript
jquery获取一个元素下面相同子元素的个数代码
Jul 31 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
Oct 22 Javascript
深入理解vue.js双向绑定的实现原理
Dec 05 Javascript
jquery实现的table排序功能示例
Mar 10 Javascript
HTML5开发Kinect体感游戏的实例应用
Sep 18 Javascript
在 Node.js 中使用 async 函数的方法
Nov 17 Javascript
vue中实现移动端的scroll滚动方法
Mar 03 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
Dec 03 Javascript
基于jQuery实现可编辑的表格
Dec 11 jQuery
Preload基础使用方法详解
Feb 03 Javascript
解决vue项目,npm run build后,报路径错的问题
Aug 13 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
域名和cookie问题(域名后缀)
2012/10/10 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP随机生成唯一HASH值自定义函数
2015/04/20 PHP
php链表用法实例分析
2015/07/09 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
YII框架http缓存操作示例
2019/04/29 PHP
通过javascript进行UTF-8编码的实现方法
2016/06/27 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
纯jQuery实现前端分页功能
2017/03/23 jQuery
Angularjs实现下拉框联动的示例代码
2017/08/22 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
VUE2.0+ElementUI2.0表格el-table循环动态列渲染的写法详解
2018/11/30 Javascript
js取小数点后两位四种方法
2019/01/18 Javascript
[03:46]显微镜下的DOTA2第七期——满血与残血
2014/06/20 DOTA
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[58:25]VP vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
如何处理Python3.4 使用pymssql 乱码问题
2016/01/08 Python
深入理解Python中的内置常量
2017/05/20 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
Python元字符的用法实例解析
2018/01/17 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
银行实习自我鉴定
2013/10/12 职场文书
教师自荐信
2013/12/10 职场文书
农村葬礼主持词
2014/03/31 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang