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 相关文章推荐
一款jquery特效编写的大度宽屏焦点图切换特效的实例代码
Aug 05 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
Dec 04 Javascript
基于javascript的COOkie的操作实现只能点一次
Dec 26 Javascript
jquery.cookie.js使用指南
Jan 05 Javascript
JAVA四种基本排序方法实例总结
Jul 24 Javascript
js获取时间精确到秒(年月日)
Mar 16 Javascript
jQuery UI结合Ajax创建可定制的Web界面
Jun 22 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
原生js实现焦点轮播图效果
Jan 12 Javascript
Jquery中attr与prop的区别详解
May 27 jQuery
使用VueCli3+TypeScript+Vuex一步步构建todoList的方法
Jul 25 Javascript
JS实现骰子3D旋转效果
Oct 24 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
MySQL连接数超过限制的解决方法
2011/07/17 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
对联广告js flash激活
2006/10/19 Javascript
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
JavaScript 字符串处理函数使用小结
2010/12/02 Javascript
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
使用JSLint提高JS代码质量方法分享
2013/12/16 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
Bootstrap对话框使用实例讲解
2016/09/24 Javascript
Vue.js第四天学习笔记(组件)
2016/12/02 Javascript
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
JS监控关闭浏览器操作的实例详解
2017/09/12 Javascript
JavaScript中严格判断NaN的方法
2018/02/16 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
如何在JS文件中获取Vue组件
2020/09/16 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python写的英文字符大小写转换代码示例
2015/03/06 Python
PyQt5主窗口动态加载Widget实例代码
2018/02/07 Python
python SMTP实现发送带附件电子邮件
2018/05/22 Python
基于Python在MacOS上安装robotframework-ride
2018/12/28 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
解决Atom安装Hydrogen无法运行python3的问题
2019/08/28 Python
IronPython连接MySQL的方法步骤
2019/12/27 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
Python如何发送与接收大型数组
2020/08/07 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
Canal官网:巴西女性时尚品牌
2019/10/16 全球购物
银行实习鉴定
2013/12/13 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
队名及霸气口号大全
2015/12/25 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python