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 相关文章推荐
javascript实现动态CSS换肤技术的脚本
Jun 29 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
May 23 Javascript
jQuery中closest和parents的区别分析
May 07 Javascript
理解javascript中的with关键字
Feb 15 Javascript
Bootstrap基本插件学习笔记之Popover提示框(19)
Dec 08 Javascript
BootStrapTable服务器分页实例解析
Dec 20 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
Feb 20 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
cnpm加速Angular项目创建的方法
Sep 07 Javascript
JS求1到任意数之间的所有质数的方法详解
May 20 Javascript
解决Vue @submit 提交后不刷新页面问题
Jul 18 Javascript
Vue两种组件类型:递归组件和动态组件的用法
Aug 06 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中存储过程、函数的一些问题
2007/02/14 PHP
PHP ajax 分页类代码
2008/11/13 PHP
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
2011/10/29 PHP
smarty 缓存控制前的页面静态化原理
2013/03/15 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
分享8个Laravel模型时间戳使用技巧小结
2020/02/12 PHP
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
jquery实现pager控件示例
2014/04/09 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
jQuery EasyUI Layout实现tabs标签的实例
2017/09/26 jQuery
jQuery控制input只能输入数字和两位小数的方法
2019/05/16 jQuery
python list语法学习(带例子)
2013/11/01 Python
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
Python查询阿里巴巴关键字排名的方法
2015/07/08 Python
python中解析json格式文件的方法示例
2017/05/03 Python
解决python线程卡死的问题
2019/02/18 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
Python约瑟夫生者死者小游戏实例讲解
2021/01/04 Python
python实现银行账户系统
2021/02/22 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
2016/09/20 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
大专生的学习自我评价
2013/12/04 职场文书
公司成立感言
2014/01/11 职场文书
财务信息服务专业自荐书范文
2014/02/08 职场文书
绿色环保演讲稿
2014/05/10 职场文书
办护照工作证明
2014/10/01 职场文书