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 相关文章推荐
js类后台管理菜单类-MenuSwitch
Sep 12 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
Dec 03 Javascript
js实现缓冲运动效果的方法
Apr 10 Javascript
javascript实现五星评价代码(源码下载)
Aug 11 Javascript
轻松实现js图片预览功能
Jan 18 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
May 30 Javascript
javascript弹出带文字信息的提示框效果
Jul 19 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
Aug 18 Javascript
Bootstrap 3.x打印预览背景色与文字显示异常的解决
Nov 06 Javascript
二维码图片生成器QRCode.js简单介绍
Aug 18 Javascript
Angular5.0 子组件通过service传递值给父组件的方法
Jul 13 Javascript
vue3中轻松实现switch功能组件的全过程
Jan 07 Vue.js
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
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
php解析json数据实例
2014/08/19 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
php微信开发之音乐回复功能
2018/06/14 PHP
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
nodejs教程之入门
2014/11/21 NodeJs
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
jQuery插件datatables使用教程
2016/04/21 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
分析javascript中9 个常见错误阻碍你进步
2017/09/18 Javascript
vue+vue-validator 表单验证功能的实现代码
2017/11/13 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
Python3计算三角形的面积代码
2017/12/18 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Python最小二乘法矩阵
2019/01/02 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
python中几种自动微分库解析
2019/08/29 Python
Python程序控制语句用法实例分析
2020/01/14 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
2020/02/26 Python
师范院校学生自荐信范文
2013/12/27 职场文书
毕业生自荐书
2014/02/03 职场文书
校长竞聘演讲稿
2014/05/16 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
机关作风建设工作总结
2014/10/23 职场文书
谢师宴邀请函
2015/02/02 职场文书
大学毕业生自我评价
2015/03/02 职场文书
2019年关于小学生课外阅读情况的分析报告
2019/12/02 职场文书