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 相关文章推荐
JavaScript 学习笔记(十二) dom
Jan 21 Javascript
Document对象内容集合(比较全)
Sep 06 Javascript
Javascript延迟执行实现方法(setTimeout)
Dec 30 Javascript
让ie6也支持websocket采用flash封装实现
Feb 18 Javascript
js setTimeout 常见问题小结
Aug 13 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
Sep 24 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
Dec 22 Javascript
js添加千分位的实现代码(超简单)
Aug 01 Javascript
深入对Vue.js $watch方法的理解
Mar 20 Javascript
Kindeditor单独调用多图上传实例
Jul 31 Javascript
详解使用angular的HttpClient搭配rxjs
Sep 01 Javascript
如何通过shell脚本自动生成vue文件详解
Sep 10 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
php将数据库导出成excel的方法
2010/05/07 PHP
PHP学习笔记之二
2011/01/17 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
php查询及多条件查询
2017/02/26 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
JavaScript定时显示广告代码分享
2015/03/02 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
2015/08/19 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
jquery实现自适应banner焦点图
2017/02/16 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
2017/03/17 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
微信小程序 Animation实现图片旋转动画示例
2018/08/22 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
解决vue打包报错Unexpected token: punc的问题
2020/10/24 Javascript
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
举例区分Python中的浅复制与深复制
2015/07/02 Python
利用python代码写的12306订票代码
2015/12/20 Python
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
利用Python自动监控网站并发送邮件告警的方法
2016/08/24 Python
在Python中使用gRPC的方法示例
2018/08/08 Python
Python根据当前日期取去年同星期日期
2019/04/14 Python
利用setuptools打包python程序的方法步骤
2020/01/18 Python
旷课检讨书1000字
2014/02/14 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
房地产促销活动方案
2014/03/01 职场文书
小学生安全教育广播稿
2014/10/20 职场文书
幼儿园小班见习报告
2014/10/31 职场文书
2015年街道除四害工作总结
2015/05/15 职场文书
Java基础-封装和继承
2021/07/02 Java/Android