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 相关文章推荐
Jquery插件写法笔记整理
Sep 06 Javascript
js取消单选按钮选中并判断对象是否为空
Nov 14 Javascript
js实现按Ctrl+Enter发送效果
Sep 18 Javascript
js手动播放图片实现图片轮播效果
Sep 17 Javascript
JQuery和PHP结合实现动态进度条上传显示
Nov 23 Javascript
Javascript之面向对象--方法
Dec 02 Javascript
详解AngularJS 路由 resolve用法
Apr 24 Javascript
React简单介绍
May 24 Javascript
详解Vue中一种简易路由传参办法
Sep 15 Javascript
微信公众平台 客服接口发消息的实现代码(Java接口开发)
Apr 17 Javascript
JS实现“全选”和&quot;全不选&quot;功能代码实例
Feb 06 Javascript
Webpack中SplitChunksPlugin 配置参数详解
Mar 24 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
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
linux平台编译安装PHP7并安装Redis扩展与Swoole扩展实例教程
2016/09/30 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
js事件(Event)知识整理
2012/10/11 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
javascript对话框使用方法(警告框 javascript确认框 提示框)
2014/01/07 Javascript
jquery实现手机号码选号的方法
2015/07/31 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
AngularJs的UI组件ui-Bootstrap之Tooltip和Popover
2018/07/13 Javascript
JS实现字符串翻转的方法分析
2018/08/31 Javascript
vue中使用input[type=&quot;file&quot;]实现文件上传功能
2018/09/10 Javascript
vue@cli3项目模板怎么使用public目录下的静态文件
2020/07/07 Javascript
jquery实现异步文件上传ajaxfileupload.js
2020/10/23 jQuery
vue 授权获取微信openId操作
2020/11/13 Javascript
Python 检查数组元素是否存在类似PHP isset()方法
2014/10/14 Python
python插入数据到列表的方法
2015/04/30 Python
python基于twisted框架编写简单聊天室
2018/01/02 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
python在openstreetmap地图上绘制路线图的实现
2019/07/11 Python
Django分页功能的实现代码详解
2019/07/29 Python
python超时重新请求解决方案
2019/10/21 Python
pytorch实现线性拟合方式
2020/01/15 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
Python读写锁实现实现代码解析
2020/11/28 Python
python利用opencv实现颜色检测
2021/02/23 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
如何在Shell脚本中使用函数
2015/09/06 面试题
电大毕业生自我鉴定
2013/11/10 职场文书
秋季运动会广播稿
2014/02/22 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
2014年电厂个人工作总结
2014/11/27 职场文书
中秋晚会致辞
2015/07/31 职场文书
生产设备维护保养制度
2015/08/06 职场文书