详解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 判断 object 的特定类转载
Feb 01 Javascript
JavaScript 事件属性绑定带参数的函数
Mar 13 Javascript
初窥JQuery(一)jquery选择符 必备知识点
Nov 25 Javascript
js中复制行和删除行的操作实例
Jun 25 Javascript
判断window.onload是否多次使用的方法
Sep 21 Javascript
ajax在兼容模式下失效的快速解决方法
Mar 22 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
Javascript操作表单实例讲解(下)
Jun 20 Javascript
js实现抽奖效果
Mar 27 Javascript
JS中的数组转变成JSON格式字符串的方法
May 09 Javascript
jQuery实现导航栏头部菜单项点击后变换颜色的方法
Jul 19 jQuery
详解自定义ajax支持跨域组件封装
Feb 08 Javascript
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
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
详解thinkphp实现excel数据的导入导出(附完整案例)
2016/12/29 PHP
thinkPHP5框架接口写法简单示例
2019/08/05 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
js调用图片隐藏&amp;显示实现代码
2013/09/13 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
详解JavaScript中双等号引起的隐性类型转换
2016/05/30 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
详解如何在vue中使用sass
2017/06/21 Javascript
jQuery实现的电子时钟效果完整示例
2018/04/28 jQuery
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
jQuery实现基本动画效果的方法详解
2018/09/06 jQuery
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
python 实现删除文件或文件夹实例详解
2016/12/04 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
Python的高阶函数用法实例分析
2019/04/11 Python
python打开音乐文件的实例方法
2020/07/21 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
很酷的HTML5电子书翻页动画特效
2016/02/25 HTML / CSS
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
德国苹果商店:MacTrade
2020/05/18 全球购物
金融专业个人求职信
2013/09/22 职场文书
留学自荐信的技巧
2013/10/17 职场文书
大学生学习自我评价
2014/01/13 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
计算机通信专业推荐信
2014/02/22 职场文书
2014乡镇“三八”国际劳动妇女节活动总结
2014/03/01 职场文书
运动会通讯稿100字
2015/07/20 职场文书
Fluentd搭建日志收集服务
2022/09/23 Servers