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 相关文章推荐
jquery 图片上传按比例预览插件集合
May 28 Javascript
jquery Mobile入门—多页面切换示例学习
Jan 08 Javascript
JavaScript常用验证函数实例汇总
Nov 25 Javascript
浅谈javascript中字符串String与数组Array
Dec 31 Javascript
jquery插件splitScren实现页面分屏切换模板特效
Jun 16 Javascript
jquery submit()不能提交表单的解决方法
Apr 24 jQuery
解决Webpack 热部署检测不到文件变化的问题
Feb 22 Javascript
JavaScript设计模式之构造函数模式实例教程
Jul 02 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
Nov 14 jQuery
详解微信小程序开发用户授权登陆
Apr 24 Javascript
Vue.js递归组件实现组织架构树和选人功能
Jul 04 Javascript
vue+axios实现post文件下载
Sep 25 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
php实现的操作excel类详解
2016/01/15 PHP
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2010/02/04 Javascript
js 创建快捷方式的代码(fso)
2010/11/19 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
vue2.x select2 指令封装详解
2017/10/12 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
vue组件生命周期详解
2017/11/07 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
使用webpack构建应用的方法步骤
2019/03/04 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
python删除文件示例分享
2014/01/28 Python
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
python模拟表单提交登录图书馆
2018/04/27 Python
Python3中的json模块使用详解
2018/05/05 Python
Python3+Appium实现多台移动设备操作的方法
2019/07/05 Python
Python实现TCP探测目标服务路由轨迹的原理与方法详解
2019/09/04 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
Tensorflow的梯度异步更新示例
2020/01/23 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
舞蹈专业求职信
2014/06/13 职场文书
关于旅游的活动方案
2014/08/15 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
校运会班级霸气口号
2015/12/24 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers