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 相关文章推荐
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
Mar 08 Javascript
javascript数组使用调用方法汇总
Dec 08 Javascript
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
Apr 01 Javascript
javascript转换静态图片,增加粒子动画效果
May 28 Javascript
javascript显示上周、上个月日期的处理方法
Feb 03 Javascript
Javascript表单特效之十大常用原理性样例代码大总结
Jul 12 Javascript
JavaScript中document.referrer的用法详解
Jul 04 Javascript
基于JavaScript实现数码时钟效果
Mar 30 Javascript
使用node.js对音视频文件加密的实例代码
Aug 30 Javascript
浅谈Vue.js路由管理器 Vue Router
Aug 16 Javascript
详解Webpack loader 之 file-loader
Nov 07 Javascript
微信小程序 SOTER 生物认证DEMO 指纹识别功能
Dec 13 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
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
2019/11/21 PHP
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
jQuery UI实现动画效果代码分享
2018/08/19 jQuery
JavaScript中关于base64的一些事
2019/05/06 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
[03:48]大碗DOTA
2019/07/25 DOTA
python内存管理分析
2015/04/08 Python
Python实现字符串逆序输出功能示例
2017/06/24 Python
Python生成数字图片代码分享
2017/10/31 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
python tkinter控件布局项目实例
2019/11/04 Python
python异常处理和日志处理方式
2019/12/24 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Python3的socket使用方法详解
2020/02/18 Python
python 的topk算法实例
2020/04/02 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
基于MUI框架使用HTML5实现的二维码扫描功能
2018/03/01 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
英国、欧洲和全球租车服务:Avis英国
2016/08/29 全球购物
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
日语翻译个人求职的自我评价
2013/10/14 职场文书
领导视察欢迎词
2014/01/15 职场文书
冬季安全检查方案
2014/05/23 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
求职信:求职应该注意的问题
2019/04/24 职场文书
励志语录:只有自己足够强大,才能不被别人践踏
2020/01/09 职场文书
教你怎么用python selenium实现自动化测试
2021/05/27 Python
java多态注意项小结
2021/10/16 Java/Android
光之国的四大叛徒:第一贝利亚导致宇宙毁灭,赛文奥特曼在榜
2022/03/18 日漫
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers