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 相关文章推荐
JS自定义功能函数实现动态添加网址参数修改网址参数值
Aug 02 Javascript
JavaScript+CSS实现仿Mootools竖排弹性动画菜单效果
Oct 14 Javascript
javascript拖拽应用实例
Mar 25 Javascript
使用jQuery5分钟快速搞定双色表格的简单实例
Aug 08 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
Nov 02 Javascript
浅谈Vue的基本应用
Dec 27 Javascript
jQuery实现的简单悬浮层功能完整实例
Jan 23 Javascript
js实现适合新闻类图片的轮播效果
Feb 05 Javascript
js禁止浏览器的回退事件
Apr 20 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
Aug 22 Javascript
微信上传视频文件提示(推荐)
Nov 22 Javascript
vue 自定义组件添加原生事件
Apr 21 Vue.js
基于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
万能的php分页类
2017/07/06 PHP
PHP const定义常量及global定义全局常量实例解析
2020/05/28 PHP
Extjs学习笔记之六 面版
2010/01/08 Javascript
如何让div span等元素能响应键盘事件操作指南
2012/11/13 Javascript
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
jquery+CSS实现的多级竖向展开树形TRee菜单效果
2015/08/24 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
jQuery Easyui学习教程之实现datagrid在没有数据时显示相关提示内容
2016/07/09 Javascript
AngularJS HTML DOM详解及示例代码
2016/08/17 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
JS实现简单的文字无缝上下滚动功能示例
2019/06/22 Javascript
使用Node.js在深度学习中做图片预处理的方法
2019/09/18 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
详解Vue之计算属性
2020/06/20 Javascript
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
Python生成不重复随机值的方法
2015/05/11 Python
Python实现的排列组合计算操作示例
2017/10/13 Python
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
Django model select的多种用法详解
2019/07/16 Python
python获取引用对象的个数方式
2019/12/20 Python
python selenium xpath定位操作
2020/09/01 Python
python3处理word文档实例分析
2020/12/01 Python
CSS去掉A标签(链接)虚线框的方法
2014/04/01 HTML / CSS
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
文字自荐书范文
2014/02/10 职场文书
表彰会主持词
2014/03/26 职场文书
小学优秀班主任事迹材料
2014/05/17 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
2014年领导班子专项整治整改方案
2014/09/28 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
javascript canvas实现雨滴效果
2021/06/09 Javascript
Python 正则模块详情
2021/11/02 Python