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针对DOM的应用分析(二)
Apr 15 Javascript
jquery 合并内容相同的单元格(示例代码)
Dec 13 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
Apr 11 Javascript
无限树Jquery插件zTree的常用功能特性总结
Sep 11 Javascript
JavaScript中string转换成number介绍
Dec 31 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(二)
May 17 Javascript
完美JQuery图片切换效果的简单实现
Jul 21 Javascript
获取select的value、text值的简单示例(jquery与javascript)
Dec 07 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
Apr 23 Javascript
js+html5实现手机九宫格密码解锁功能
Jul 30 Javascript
React路由鉴权的实现方法
Sep 05 Javascript
JS前后端实现身份证号验证代码解析
Jul 23 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
Zerg剧情介绍
2020/03/14 星际争霸
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
2010/06/09 PHP
解析ajax事件的调用顺序
2013/06/17 PHP
PHP多例模式介绍
2013/06/24 PHP
smarty表格换行实例
2014/12/15 PHP
laravel框架的安装与路由实例分析
2019/10/11 PHP
字符串的replace方法应用浅析
2011/12/06 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
JS实现一个简单的日历
2017/02/22 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
JavaScript实现的简单Tab点击切换功能示例
2018/07/06 Javascript
JS实现数组深拷贝的方法分析
2019/03/06 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
原生js 实现表单验证功能
2021/02/08 Javascript
python django 增删改查操作 数据库Mysql
2017/07/27 Python
Python的argparse库使用详解
2018/10/09 Python
Django项目中添加ldap登陆认证功能的实现
2019/04/04 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
用 Python 制作地球仪的方法
2020/04/24 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
python爬虫容易学吗
2020/06/02 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
Python钉钉报警及Zabbix集成钉钉报警的示例代码
2020/08/17 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
任意存:BOXFUL
2018/05/21 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
高中毕业的自我鉴定
2013/12/09 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
分析MySQL优化 index merge 后引起的死锁
2022/04/19 MySQL