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 相关文章推荐
静态的动态续篇之来点XML
Aug 15 Javascript
超酷的网页音乐播放器DewPlayer使用方法
Dec 18 Javascript
fancybox modal的完美解决(右上的X)
Oct 30 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
Apr 26 Javascript
Javascript MVC框架Backbone.js详解
Sep 18 Javascript
JS操作HTML自定义属性的方法
Feb 10 Javascript
js实现鼠标感应图片展示的方法
Feb 27 Javascript
带有定位当前位置的百度地图前端web api实例代码
Jun 21 Javascript
通过sails和阿里大于实现短信验证
Jan 04 Javascript
JavaScript实现二维坐标点排序效果
Jul 18 Javascript
vue中接口域名配置为全局变量的实现方法
Sep 20 Javascript
微信小程序发布新版本时自动提示用户更新的方法
Jun 07 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源代码安装常见错误与解决办法分享
2013/05/28 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
基于laravel where的高级使用方法
2019/10/10 PHP
JavaScript静态的动态
2006/09/18 Javascript
js 操作css实现代码
2009/06/11 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
20个非常棒的 jQuery 幻灯片插件和教程分享
2011/08/23 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
JavaScript页面加载事件实例讲解
2019/09/01 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
浅谈Python的垃圾回收机制
2016/12/17 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
解决django后台管理界面添加中文内容乱码问题
2019/11/15 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
Kaufmann Mercantile官网:家居装饰、配件、户外及更多
2018/09/28 全球购物
高尔夫球鞋、服装、手套和装备:FootJoy
2018/12/15 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
2015/10/22 面试题
营销主管自我评价怎么写
2013/09/19 职场文书
室内设计专业个人的自我评价
2013/10/19 职场文书
经典优秀个人求职信分享
2013/12/12 职场文书
会计职业生涯规划范文
2014/01/04 职场文书
高级编程求职信模板
2014/02/16 职场文书
学校教代会开幕词
2016/03/04 职场文书
Python序列化与反序列化相关知识总结
2021/06/08 Python