详解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 iframe内的函数调用实现方法
Jul 19 Javascript
基于jQuery的获取标签名的代码
Jul 16 Javascript
JavaScript避免代码的重复执行经验技巧分享
Apr 17 Javascript
jQuery实现Twitter的自动文字补齐特效
Nov 28 Javascript
推荐10 款 SVG 动画的 JavaScript 库
Mar 24 Javascript
js获取form的方法
May 06 Javascript
jQuery实现jQuery-form.js实现异步上传文件
Apr 28 jQuery
xmlplus组件设计系列之文本框(TextBox)(3)
May 03 Javascript
JavaScript实现表单注册、表单验证、运算符功能
Oct 15 Javascript
深入探索VueJS Scoped CSS 实现原理
Sep 23 Javascript
vue 解决兄弟组件、跨组件深层次的通信操作
Jul 27 Javascript
Vue的过滤器你真了解吗
Feb 24 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
编写自己的php扩展函数
2006/10/09 PHP
php strtotime 函数UNIX时间戳
2009/01/14 PHP
PHP 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
php实现session共享的实例方法
2019/09/19 PHP
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
重写document.write实现无阻塞加载js广告(补充)
2014/12/12 Javascript
jQuery实现form表单基于ajax无刷新提交方法详解
2015/12/08 Javascript
js+css简单实现网页换肤效果
2015/12/29 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
微信小程序rich-text富文本用法实例分析
2019/05/20 Javascript
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
Python之re操作方法(详解)
2017/06/14 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
实例介绍Python中整型
2019/02/11 Python
Python3.5装饰器原理及应用实例详解
2019/04/30 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
Django model update的多种用法介绍
2020/03/28 Python
Win10环境python3.7安装dlib模块趟过的坑
2019/08/01 Python
python os.fork() 循环输出方法
2019/08/08 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
Python with语句用法原理详解
2020/07/03 Python
品管员岗位职责
2013/11/10 职场文书
自我鉴定三原则
2014/01/13 职场文书
环境工程专业自荐信范文
2014/06/24 职场文书
本科毕业生应聘自荐信范文
2014/06/26 职场文书
2014年创卫工作总结
2014/11/24 职场文书
停电通知范文
2015/04/16 职场文书
同学会感言
2015/07/30 职场文书
公司费用报销管理制度
2015/08/04 职场文书
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle