Jsonp 跨域的原理以及Jquery的解决方案


Posted in Javascript onMay 18, 2010

原理:JSONP即JSON with Padding。由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源。如果要进行跨域请求,我们可以通过使用html的script标记来进行跨域请求,并在响应中返回要执行的script代码,其中可以直接使用JSON传递javascript对象。这种跨域的通讯方式称为JSONP。
个人理解:

就是在客户端动态注册一个函数function a(data),然后将函数名传到服务器,服务器返回一个a({/*json*/})到客户端运行,这样就调用客户端的function a(data),从而实现了跨域.

<!DOCTYPE html PUBLIC "-//W//DTD XHTML Transitional//EN" "http://www.worg/TR/xhtmlDTD/xhtmltransitional.dtd"> 
<html xmlns="http://www.worg/xhtml" > 
<head> 
<title>Test Jsonp</title> 
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js" type="text/javascript"></script> 
<script type="text/javascript"> 
function jsonpCallback(result) 
{ 
$.each(result.items, function(i,item){ 
$("<img/>").attr("src", item.media.m).appendTo("body"); 
if ( i == 3 ) return false; 
}); 
} 
</script> 
</head> 
<body> 
<script type="text/javascript" src="http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=jsonpCallback"></script> 
</body> 
</html>

jQuery的解决方案:

<!DOCTYPE html PUBLIC "-//W//DTD XHTML Transitional//EN" "http://www.worg/TR/xhtmlDTD/xhtmltransitional.dtd"> 
<html xmlns="http://www.worg/xhtml" > 
<head> 
<title>Test Jsonp</title> 
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$(function() { 
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data) { 
$.each(data.items, function(i, item) { 
$("<img/>").attr("src", item.media.m).appendTo("body"); 
if (i == 3) return false; 
}); 
}); 
}); 
</script> 
</head> 
<body></body> 
</html>

jquery 的jsoncallback是动态生成的,真正请求服务器的地址:http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=jsonp1274058545738

Javascript 相关文章推荐
Javascript延迟执行实现方法(setTimeout)
Dec 30 Javascript
SeaJS入门教程系列之完整示例(三)
Mar 03 Javascript
JavaScript分秒倒计时器实现方法
Feb 02 Javascript
Jquery时间轴特效(三种不同类型)
Nov 02 Javascript
JavaScript 中 apply 、call 的详解
Mar 21 Javascript
JavaScript禁止微信浏览器下拉回弹效果
May 16 Javascript
ES6学习之变量的两种命名方法示例
Jul 18 Javascript
two.js之实现动画效果示例
Nov 06 Javascript
Vue组件的使用及个人理解与介绍
Feb 09 Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 Javascript
详解JavaScript中精度失准问题及解决方法
Feb 04 Javascript
7个你应该知道的JS原生错误类型
Apr 29 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
May 18 #Javascript
JS request函数 用来获取url参数
May 17 #Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
May 17 #Javascript
JQuery中的ready函数冲突的解决方法
May 17 #Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
May 17 #Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
May 17 #Javascript
jQuery 学习第五课 Ajax 使用说明
May 17 #Javascript
You might like
php去除字符串换行符示例分享
2014/02/13 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
2015/08/23 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
jquery 学习之二 属性 文本与值(text,val)
2010/11/25 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
jQuery中事件与动画的总结分享
2016/05/24 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
Three.js学习之文字形状及自定义形状
2016/08/01 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
vue单页缓存存在的问题及解决方案(小结)
2018/09/25 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
Python中删除文件的程序代码
2011/03/13 Python
用Python实现一个简单的线程池
2015/04/07 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
Python 多进程和数据传递的理解
2017/10/09 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
python 执行终端/控制台命令的例子
2019/07/12 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
python多线程并发及测试框架案例
2019/10/15 Python
Python实现快速排序的方法详解
2019/10/25 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
python+selenium 简易地疫情信息自动打卡签到功能的实现代码
2020/08/22 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
如何写一个自定义标签
2012/12/28 面试题
入党积极分子思想汇报
2014/01/02 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
教师群众路线心得体会
2014/11/04 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
新员工入职感言范文!
2019/07/04 职场文书
为什么阅读对所有年龄段的孩子都很重要?
2019/07/08 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
女人创业励志语录,句句蕴含能量,激发你的潜能
2019/08/20 职场文书
使用HttpSessionListener监听器实战
2022/03/17 Java/Android