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 相关文章推荐
js继承 Base类的源码解析
Dec 30 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
Apr 07 Javascript
JS获取页面input控件中所有text控件并追加样式属性
Feb 25 Javascript
jQuery循环动画与获取组件尺寸的方法
Feb 02 Javascript
微信jssdk在iframe页面失效问题的解决措施
Mar 03 Javascript
AngularJS入门教程之服务(Service)
Jul 27 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
Aug 17 Javascript
基于Bootstrap仿淘宝分页控件实现代码
Nov 07 Javascript
浅谈ES6新增的数组方法和对象
Aug 08 Javascript
浅谈Vue.js中的v-on(事件处理)
Sep 05 Javascript
小程序云开发实战小结
Oct 25 Javascript
如何使用vuex实现兄弟组件通信
Nov 02 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
PHP遍历二维数组的代码
2011/04/22 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
使用PHP备份MySQL和网站发送到邮箱实例代码
2013/11/28 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
2018/12/08 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
从JavaScript的函数重名看其初始化方式
2007/03/08 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
jquery.validate使用时遇到的问题
2015/05/25 Javascript
SublimeText自带格式化代码功能之reindent
2015/12/27 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
Jq通过td获取同行其它列td的方法
2016/10/05 Javascript
用原生js做单页应用
2017/01/17 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
Python中字典(dict)和列表(list)的排序方法实例
2014/06/16 Python
Python中使用 Selenium 实现网页截图实例
2014/07/18 Python
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
漂亮的Django Markdown富文本app插件的实现
2019/01/02 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
django 实现简单的插入视频
2020/04/07 Python
学习Python爬虫的几点建议
2020/08/05 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
学期自我评价
2014/01/27 职场文书
电力公司个人求职信范文
2014/02/04 职场文书
个人投资计划书
2014/05/01 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python