jquery及原生javascript对jsonp解决跨域问题实例详解
jquery方式
前端:
$.ajax({
url: 'http://m.xxx.tv/goLottery',
data: { data: data },
type: 'GET',
dataType: 'jsonp',
beforeSend: function() {
},
success: function(data) {
//data格式不变,正常处理
}
})
后台(php):
public function actionGoLottery(){
$result = '后台数据';
//正常处理
//echo $result;
//跨域请求处理
$jsonpCallback = $_GET['callback'];
echo $jsonpCallback.'({errno: 0, data: '. json_encode($result) .'})';
}
html变化:

利用script的src不受域名限制的特点,jquery在head内动态插入一个script标签,src指向我们要请求的接口,并带上了一个callback参数,callback值为jquery产生的一个随机字符串(也可以自定义),在jsonp请求结束后,jquery立马删除了这个script标签。
服务器收到请求,拿到callback的函数名,然后把后台数据作为参数包在函数里面返回给前端,jquery拿到数据返回到success接口给我们处理
javascript方式处理jsonp
前端:
jsonpHandler = function(data){
handel(data);
}
setTimeout(function(){
var jsonp_path = url + "?callback=jsonpHandler";
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = jsonp_path;
//插入后开始请求url
document.getElementsByTagName('body')[0].appendChild(script);
},0)
后台处理一样,见上方jquery后台处理部分。
setTimeout(function(){},0)的作用是最后执行这段代码,确保插入动态script后,请求接口回来的回调函数(jsonpHandler )可以找到,不会出现undefined的错误
具体原理,可以百度或google其他文章,这里只做点实例分析,希望辅助理解jsonp
jquery及原生javascript对jsonp解决跨域问题实例详解的更多相关文章
- JS JSOP跨域请求实例详解
JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题.这篇文章主要介绍了JS JSOP跨域请求实例详解的相关资料,需要的朋友可以参考下 ...
- AJAX跨域问题解决方法(2)——JSONP解决跨域
JSONP是什么?JSON全称为JSON with Padding,是JSON的一种补充的使用方式,不是官方协议. 使用JSONP服务器后台要改动吗?JSONP不同于一般的ajax请求返回json对象 ...
- 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- [转]js中几种实用的跨域方法原理详解
转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...
- 在ASP.NET 5应用程序中的跨域请求功能详解
在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏 ...
- iframe 跨域问题解决方案 利用window.name+iframe跨域获取数据详解
详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...
- VUE SpringCloud 跨域资源共享 CORS 详解
VUE SpringCloud 跨域资源共享 CORS 详解 作者: 张艳涛 日期: 2020年7月28日 本篇文章主要参考:阮一峰的网络日志 » 首页 » 档案 --跨域资源共享 CORS 详解 ...
- AJAX(XMLHttpRequest)进行跨域请求方法详解
AJAX(XMLHttpRequest)进行跨域请求方法详解(三) 2010年01月11日 08:48:00 阅读数:24213 注意:以下代码请在Firefox 3.5.Chrome 3.0.Saf ...
- 详解Jquery和AngularJs,Servlet中jsonp解决跨域问题(转)
众所周知,jsonp可以解决跨域问题,下面是我在查阅资料和实际项目使用后的一些总结. Jquery中jsonp的使用 //myUrl = "http://localhost:8090/api ...
随机推荐
- UWP 中实现一个颜色选择器 UWPColorPickerControl
最近在实现一个远程数字白板时,发现UWP平台上颜色选择不方便,因此自己动手写了一个. 效果图 实现 <UserControl x:Class="UWPColorPickerLibrar ...
- 关于android:id="@+id/xx"的理解
之前学习android的时候,对android:id="@+id/xx"总感觉混淆,不理解,刚看了一篇文章.现在貌似是恍然大悟.故做了一下笔记,希望帮助有共同问题的人... and ...
- MariaDB10自动化安装部署
去MariaDB官网下载MariaDB本文用的是MariaDB 10.1.16 https://downloads.mariadb.org 选择二进制版本,下载到/root目录下 mariadb-10 ...
- HDU-1994-利息计算
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1994 水题 题目分析 就是两种储存方式,输出所得本金加利息 代码 #include<stdio. ...
- Java 字符终端上获取输入三种方式
http://blog.csdn.net/hongweigg/article/details/14448731 在Java 字符终端上获取输入有三种方式: 1.java.lang.System.in ...
- JWPlayer支持SD/HD
First, we have to render two versions of our video: an SD (standard definition) and HD (high definit ...
- HttpServletRequest和ServletRequest的区别
servlet理论上可以处理多种形式的请求响应形式,http只是其中之一所以HttpServletRequest HttpServletResponse分别是ServletRequest和Servle ...
- Bootstrap入门(十一)组件5:输入框组
Bootstrap入门(十一)组件5:输入框组 1.为其中添加第一个输入框 2.添加额外的元素 3.为用户提供标识 4.改变输入框的尺寸 5.为额外添加多选/单选框 6.与按钮结合 7.与下拉菜单 ...
- JS消化理解
JS执行的时候是必须在网页里面执行,和样式表差不多,也是内嵌的样式表,嵌在网页里面或外部的! 一 嵌在网页里面怎么嵌? 如果你想在网页里面嵌脚本,你需要在网页里面打出一块区域,这块区域来写脚本,在写样 ...
- Python抓取百度百科数据
前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...