详解js跨域请求的两种方式,支持post请求


Posted in Javascript onMay 05, 2018

JSONP实现跨域

常用的jquery实现跨域调用

$.ajax({
  url: "http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/index.php",
  dataType: "jsonp",
  jsonp: "callback",
  context: document.body,
  success: function(data) {
    console.log(data);
  }
});

这个调用实际上的实现原理是
在网页中构造一个script标签,将src设置为对应的url,并增加上相应的callback参数,形如如下格式:

<script src="http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/index.php?callback=jQuery211018970995225637144_1465350372062&_=1465350372063"></script>

请求的服务端代码如下:

$data   = json_encode(array("id" => "1", "name" => "tom"));
$callback = $_GET["callback"];
echo $callback . "(" . $data . ")";

实际上最后返回的内容就是一段js代码:

jQuery211018970995225637144_1465350372062({"id":"1","name":"tom"})

当浏览器获取到该段js代码后就会执行这个函数,从而实现回调ajax请求时设置的success方法。

jsonp实现的缺点

了解了原理后,就知道jsonp实现的跨域方式不支持post请求,只能支持get请求。但是如果需要支持post请求该怎么办呢?下面谈下服务器端设置的方式。

服务端设置支持跨域

主要是Access-Control-Allow-Origin头参数,该参数用来指定允许哪个来源的域请求。服务端代码如下:

// 表示支持所有来源的域进行请求
// 实际在操作过程中可以设置为指定域
header('Access-Control-Allow-Origin:*');
$data = json_encode(array("id" => "1", "name" => "tom"));
echo $data;

对应的js代码:

$.ajax({
  type: "POST",
  url: "http://127.0.0.1/~chenjiebin/mycode/php/crossdomain/header.php",
  dataType: "json",
  success: function(data) {
    console.log(data);
  }
});

可以支持post请求。

小结

实际上个人并不是特别喜欢用跨域请求的方式,可能会带来一些不可预见的安全问题。比较习惯的方式通过本域下的服务端和跨域的源服务器进行交互。

Javascript 相关文章推荐
JavaScript confirm选择判断
Oct 18 Javascript
jQuery MD5加密实现代码
Mar 15 Javascript
javascript返回顶部效果(自写代码)
Jan 06 Javascript
提高jQuery性能的十个诀窍
Nov 14 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
May 25 Javascript
JavaScript中transform实现数字翻页效果
Mar 08 Javascript
jQuery插件HighCharts绘制2D圆环图效果示例【附demo源码下载】
Mar 09 Javascript
详解Vuejs2.0之异步跨域请求
Apr 20 Javascript
想用好React的你必须要知道的一些事情
Jul 24 Javascript
js使用generator函数同步执行ajax任务
Sep 05 Javascript
浅谈VueJS SSR 后端绘制内存泄漏的相关解决经验
Dec 20 Javascript
vue el-upload上传文件的示例代码
Dec 21 Vue.js
vue 注册组件的使用详解
May 05 #Javascript
Vue三层嵌套路由的示例代码
May 05 #Javascript
动态加载JavaScript文件的3种方式
May 05 #Javascript
Node.js的Koa实现JWT用户认证方法
May 05 #Javascript
浅谈vue项目可以从哪些方面进行优化
May 05 #Javascript
Angular模版驱动表单的使用总结
May 05 #Javascript
浅谈Angular HttpClient简单入门
May 04 #Javascript
You might like
关于js遍历表格的实例
2013/07/10 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
JavaScript学习笔记之数组求和方法
2016/03/23 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
jQuery EasyUI中的日期控件DateBox修改方法
2016/11/09 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
使用nvm管理不同版本的node与npm的方法
2017/10/31 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
实例讲解Python中的私有属性
2014/08/21 Python
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
python类的继承实例详解
2017/03/30 Python
Python3实现转换Image图片格式
2018/06/21 Python
python中的字符串内部换行方法
2018/07/19 Python
基于python解线性矩阵方程(numpy中的matrix类)
2019/10/21 Python
python文件读写代码实例
2019/10/21 Python
matplotlib基础绘图命令之bar的使用方法
2020/08/13 Python
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
模具设计与制造专业推荐信
2014/02/16 职场文书
老师的检讨书
2014/02/23 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
欢送领导祝酒词
2015/08/12 职场文书