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自动打开页面上链接的实现代码
Sep 25 Javascript
jQuery去掉字符串起始和结尾的空格(多种方法实现)
Apr 01 Javascript
JQuery中使用.each()遍历元素学习笔记
Nov 08 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
Sep 27 Javascript
jQuery实现的调整表格行tr上下顺序
Jan 10 Javascript
Dojo获取下拉框的文本和值实例代码
May 27 Javascript
js实现浏览器倒计时跳转页面效果
Aug 12 Javascript
详解如何在React组件“外”使用父组件的Props
Jan 12 Javascript
JS中Object对象的原型概念基础
Jan 29 Javascript
Smartour 让网页导览变得更简单(推荐)
Jul 19 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
Jul 30 Javascript
JavaScript中reduce()的用法
May 11 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
兼容ie6浏览器的php下载文件代码分享
2014/07/14 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
解决form中action属性后面?传递参数 获取不到的问题
2017/07/21 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
JQuery 给元素绑定click事件多次执行的解决方法
2014/09/09 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
2016/08/01 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
JS实现简易计算器
2020/02/14 Javascript
Vue自定义组件的四种方式示例详解
2020/02/28 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
2020/05/15 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
python实现websocket的客户端压力测试
2019/06/25 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
Python银行系统实战源码
2019/10/25 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
用python解压分析jar包实例
2020/01/16 Python
django模型动态修改参数,增加 filter 字段的方式
2020/03/16 Python
使用python实现CGI环境搭建过程解析
2020/04/28 Python
详解python程序中的多任务
2020/09/16 Python
个人简历中的自我评价范例
2013/10/29 职场文书
物业管理专业自荐信
2014/07/01 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
健康状况证明模板
2014/10/23 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
Redis数据结构之链表与字典的使用
2021/05/11 Redis
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
配置Kubernetes外网访问集群
2022/03/31 Servers
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸