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


Posted in Javascript onJune 27, 2011

如果要进行跨域请求,我们可以通过使用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 权威指南(第四版) 读书笔记
Aug 11 Javascript
JavaScript性能陷阱小结(附实例说明)
Dec 28 Javascript
js中关于一个分号的崩溃示例
Nov 11 Javascript
判断某个字符在一个字符串中是否存在的js代码
Feb 28 Javascript
js判断文本框输入的内容是否为数字
Dec 23 Javascript
javascript每日必学之继承
Feb 23 Javascript
D3.js实现柱状图的方法详解
Sep 21 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
Dec 24 Javascript
layUI实现列表查询功能
Jul 27 Javascript
在node环境下parse Smarty模板的使用示例代码
Nov 15 Javascript
jQuery实现弹幕特效
Nov 29 jQuery
解决vue项目中某一页面不想引用公共组件app.vue的问题
Aug 14 Javascript
基于jQuery实现的当离开页面时出现提示的实现代码
Jun 27 #Javascript
基于JQuery实现CheckBox全选全不选
Jun 27 #Javascript
修改好的jquery滚动字幕效果实现代码
Jun 22 #Javascript
javascript温习的一些笔记 基础常用知识小结
Jun 22 #Javascript
jquery加载页面的方法(页面加载完成就执行)
Jun 21 #Javascript
jquery一般方法介绍 入门参考
Jun 21 #Javascript
jquery操作select option 的代码小结
Jun 21 #Javascript
You might like
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
php支持中文字符串分割的函数
2015/05/28 PHP
PHP编写RESTful接口的方法
2016/02/21 PHP
浅谈php中变量的数据类型判断函数
2017/03/04 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
laravel中的fillable和guarded属性详解
2019/10/23 PHP
对联广告js flash激活
2006/10/19 Javascript
JavaScript 拖拉缩放效果
2008/12/10 Javascript
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
Jquery 扩展方法
2010/05/06 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
从零开始学习搭建React脚手架项目
2018/08/23 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
2018/10/26 Javascript
详解ES6系列之私有变量的实现
2018/11/21 Javascript
jquery.pager.js分页实现详解
2019/07/29 jQuery
js利用递归与promise 按顺序请求数据的方法
2019/08/30 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
vuex分模块后,实现获取state的值
2020/07/26 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
Python中的groupby分组功能的实例代码
2018/07/11 Python
Python设计模式之建造者模式实例详解
2019/01/17 Python
Python 3.8中实现functools.cached_property功能
2019/05/29 Python
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
PHP面试题大全
2015/10/16 面试题
毕业生自我鉴定实例
2014/01/21 职场文书
授权委托书样本
2014/04/03 职场文书
儿童生日会策划方案
2014/05/15 职场文书
战略合作意向书
2014/07/29 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
汶川大地震感悟
2015/08/10 职场文书
《将心比心》教学反思
2016/02/23 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js
Python中的变量与常量
2021/11/11 Python
JavaScript数组 几个常用方法总结
2021/11/11 Javascript