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 相关文章推荐
用jquery与css打造个性化的单选框和复选框
Oct 20 Javascript
IE6/IE7中JavaScript json提示缺少标识符、字符串或数字问题处理
Dec 16 Javascript
jquery树形菜单效果的简单实例
Jun 06 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
Oct 19 Javascript
详解RequireJS按需加载样式文件
Apr 12 Javascript
JavaScript实现body内任意节点的自定义属性功能示例
Sep 18 Javascript
jQuery 开发之EasyUI 添加数据的实例
Sep 26 jQuery
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
Apr 08 Javascript
微信小程序云开发如何使用云函数生成二维码
May 18 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
Jan 21 Javascript
小程序实现简单语音聊天的示例代码
Jul 24 Javascript
Vue Render函数原理及代码实例解析
Jul 30 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
MySql中正则表达式的使用方法描述
2008/07/30 PHP
php 生成饼图 三维饼图
2009/09/28 PHP
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
2014/05/10 PHP
PHP生成条形图的方法
2014/12/10 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
js获取内联样式的方法
2015/01/27 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
jquery实现全选和全不选功能效果的实现代码【推荐】
2016/05/05 Javascript
Bootstrap源码解读媒体对象、列表组和面板(10)
2016/12/26 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
vue使用自定义icon图标的方法
2018/05/14 Javascript
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
小程序文字跑马灯效果
2018/12/28 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
Python实现将文本生成二维码的方法示例
2017/07/18 Python
python变量的存储原理详解
2019/07/10 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
python中导入 train_test_split提示错误的解决
2020/06/19 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
跑步爱好者一站式服务网站:Jack Rabbit
2016/09/01 全球购物
幼师自荐信
2013/10/26 职场文书
党章学习思想汇报
2014/01/14 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
技术股份合作协议书
2014/10/05 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
音乐会主持人开场白
2015/05/28 职场文书
2016年圣诞节活动总结范文
2016/04/01 职场文书
MySQL 数据恢复的多种方法汇总
2021/06/21 MySQL
MySQL索引失效场景及解决方案
2022/07/23 MySQL