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 相关文章推荐
从sohu弄下来的flash中展示图片的代码
Apr 27 Javascript
仿百度的关键词匹配搜索示例
Sep 25 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
JQuery实现网页右侧随动广告特效
Jan 17 Javascript
利用Angularjs和原生JS分别实现动态效果的输入框
Sep 01 Javascript
js多个物体运动功能实例分析
Dec 20 Javascript
js获取浏览器的各种属性
Apr 27 Javascript
Js中async/await的执行顺序详解
Sep 22 Javascript
vue cli 3.x 项目部署到 github pages的方法
Apr 17 Javascript
解决vue-cli 打包后自定义动画未执行的问题
Nov 12 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
Dec 22 Javascript
VueCli4项目配置反向代理proxy的方法步骤
May 17 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
我的论坛源代码(九)
2006/10/09 PHP
遍历指定目录下的所有目录和文件的php代码
2011/11/27 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
Yii2数据库操作常用方法小结
2017/05/04 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
PHP filter_var() 函数, 验证判断EMAIL,URL等
2021/03/09 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
javascript 带有滚动条的表格,标题固定,带排序功能.
2009/11/13 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
jquery与ajax获取特殊字符实例详解
2017/01/08 Javascript
JS查找数组中重复元素的方法详解
2017/06/14 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
VUE-cli3使用 svg-sprite-loader
2018/10/20 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
关于vue里页面的缓存详解
2019/11/04 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
Vue实现一种简单的无限循环滚动动画的示例
2021/01/10 Vue.js
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
python简单文本处理的方法
2015/07/10 Python
pip命令无法使用的解决方法
2018/06/12 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
keras topN显示,自编写代码案例
2020/07/03 Python
python实现图书馆抢座(自动预约)功能的示例代码
2020/09/29 Python
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
2015年护士长个人工作总结
2015/04/24 职场文书
2016年6月份红领巾广播稿
2015/12/21 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL
Pandas数据结构之Series的使用
2022/03/31 Python
如何通过一篇文章了解Python中的生成器
2022/04/02 Python