本文实例讲述了AngularJS实现的JSONP跨域访问数据传输功能。分享给大家供大家参考,具体如下:

大家会自然想到只有一个字母之差的JSON吧~
JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不是一回事儿
JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议。我们拿最近比较火的谍战片来打个比方,JSON是地下党们用来书写和交换情报的“暗号”,而JSONP则是把用暗号书写的情报传递给自己同志时使用的接头方式。看到没?一个是描述信息的格式,一个是信息传递双方约定的方法。
浏览器是存在同源策略这个机制的,在全局层面禁止了页面加载或执行与自身来源不同的域的任何脚本。
JSONP是一种可以绕过浏览器的安全限制,从不同的域请求数据的方法。
Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有”src”这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>);
如果想通过纯web端(ActiveX控件、服务端代理、属于未来的HTML5之Websocket等方式不算)跨域访问数据就只有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理;JSON的纯字符数据格式可以简洁的描述复杂数据,被js原生支持,所以在web客户端通过与调用脚本一模一样的方式,来调用跨域服务器上动态生成的js格式文件(一般以JSON为后缀),显而易见,服务器之所以要动态生成JSON文件,目的就在于把客户端需要的数据装入进去。为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
JSONP的原理是通过<script>标签发起一个GET请求来取代XHR请求。JSONP生成一个<script>标签并插到DOM中,然后浏览器会接管并向src属性所指向的地址发送请求。
当服务器返回请求时,响应结果会被包装成一个JavaScript函数,并由该请求所对应的回调函数调用。
AngularJS在http服务中提供了一个JSONP辅助函数。通过http服务中提供了一个JSONP辅助函数。通过http服务的jsonp方法可以发送请求,如下所示:
$http .jsonp("https://api.github.com?callback=JSON_CALLBACK") .success(function(data) {
// 数据
});
当请求被发送时,AngularJS会在DOM中生成一个如下所示的<script>标签:
<script src="https://api.github.com?callback=angular.callbacks._0" type="text/javascript"></script>
注意,JSON_CALLBACK被替换成了一个特地为此请求生成的自定义函数。当支持JSOPN的服务器返回数据时,数据会被包装在由AngularJS生成的具名函数angular.callbacks._0中在这个例子中,GitHub服务器会返回包含在回调函数中的JSON数据,响应看起来如下所示:
// 简写
angular.callbacks._0({
'meta': {
'X-RateLimit-Limit': '60',
'status': 200
},
'data': {
'current_user_url': 'https://api.github.com/user'
}
})
当AngularJS调用指定的回调函数时会对$http的promise对象进行resolve。当我们自己开发支持JSONP的后端服务时,要确保响应的数据被包含在请求所指定的回调函数中。使用JSONP需要意识到潜在的安全风险。首先,服务器会完全开放,允许后端服务调用应用中的任何JavaScript。不受我们控制的外部站点(或者蓄意攻击者)可以随时更改脚本,使我们的整个站点变得脆弱。服务器或中间人有可能会将额外的JavaScript逻辑返回给页面,从而将用户的隐私数据暴露出来。由于请求是由<script>标签发送的,所以只能通过JSONP发送GET请求。并且脚本的异常也很难处理。使用JSONP一定要谨慎,同时只跟信任并可以控制的服务器进行通信。
一句话就是利用script标签绕过同源策略,获得一个类似这样的数据,jsonpcallback是页面存在的回调方法,参数就是想得到的json。
Jquery中jsonp的使用
myUrl = "http://localhost:8090/api/test";
$.ajax({
type:"GET",
url:myUrl,
dataType:"jsonp",
jsonp:"callback",
jsonpCallback:"jsonpCallback",
success:function(data){
alert(data.msg);
}
});
function jsonpCallback(data){
alert(data);
}
1.jsonp只能使用get请求,解决同源问题,返回javascript代码,因为请求javascript文件是没有同源问题的。
2.当请求数据类型为jsonp时,会将callback=jsonpCallback加在url上,http://localhost:8090/api/testcallback=jsonpCallback
3.前台javascript中定义jsonpCallback函数,此函数必须定义在window下,也就是全局的函数,否则找不到。
4.后台获取请求的callback参数值jsonpCallback,返回字符串"jsonpCallback(result)",result为返回结果。
5.请求返回的是script tag,首先会调用jsonpCallback函数,不管是否找到该函数,都会调用success函数。
6.如果没有定义jsonp和jsonpCallback,jsonp默认为"callback",jsonpCallback会是Jquery自动生成的函数名。
angularJS中jsonp的使用
myUrl = "http://localhost:8090/api/test?callback=JSON_CALLBACK";
$http.jsonp(myUrl).success(
function(data){
alert(data);
}
);
1.angularJS中使用$http.jsonp函数
2.指定callback和回调函数名,函数名为JSON_CALLBACK时,会调用success回调函数,JSON_CALLBACK必须全为大写。
3.也可以指定其它回调函数,但必须是定义在window下的全局函数。
4.url中必须加上callback
5.当callback为JSON_CALLBACK时,只会调用success,即使window中有JSON_CALLBACK函数,也不会调用该函数。
更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《AngularJS指令操作技巧总结》、《AngularJS入门与进阶教程》及《AngularJS MVC架构总结》
希望本文所述对大家AngularJS程序设计有所帮助。
# AngularJS
# JSONP
# 跨域访问
# 数据传输
# Angular CLI发布路径的配置项浅析
# Angular4实现图片上传预览路径不安全的问题解决
# angular2 ng build部署后base文件路径问题详细解答
# Angular.JS去掉访问路径URL中的#号详解
# Angular 项目路径添加指定的访问前缀
# 回调
# 是一种
# 客户端
# 所示
# 服务端
# 不受
# 只有一个
# 会将
# 自己的
# 装进
# 的是
# 后端
# 进阶
# 器上
# 是在
# 成了
# 相关内容
# 在这个
# 那就
# 很难
相关文章:
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
教学网站制作软件,学习*后期制作的网站有哪些?
建站之星会员如何解锁更多建站功能?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
如何用狗爹虚拟主机快速搭建网站?
寿县云建站:智能SEO优化与多行业模板快速上线指南
建站之星安装后如何自定义网站颜色与字体?
招商网站制作流程,网站招商广告语?
如何通过虚拟主机快速搭建个人网站?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
历史网站制作软件,华为如何找回被删除的网站?
如何选择高性价比服务器搭建个人网站?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
如何在橙子建站上传落地页?操作指南详解
高防服务器:AI智能防御DDoS攻击与数据安全保障
建站之星云端配置指南:模板选择与SEO优化一键生成
建站主机与服务器功能差异如何区分?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
广州顶尖建站服务:企业官网建设与SEO优化一体化方案
如何选择高效可靠的多用户建站源码资源?
成都网站制作报价公司,成都工业用气开户费用?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
建站之星在线版空间:自助建站+智能模板一键生成方案
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
自助网站制作软件,个人如何自助建网站?
官网网站制作腾讯审核要多久,联想路由器newifi官网
阿里云网站制作公司,阿里云快速搭建网站好用吗?
如何在云主机上快速搭建多站点网站?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?
平台云上自助建站如何快速打造专业网站?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
如何用IIS7快速搭建并优化网站站点?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
如何在IIS管理器中快速创建并配置网站?
网站制作服务平台,有什么网站可以发布本地服务信息?
如何快速生成凡客建站的专业级图册?
如何配置WinSCP新建站点的密钥验证步骤?
Bpmn 2.0的XML文件怎么画流程图
如何获取免费开源的自助建站系统源码?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
大连 网站制作,大连天途有线官网?
高端云建站费用究竟需要多少预算?
如何快速重置建站主机并恢复默认配置?
网站制作壁纸教程视频,电脑壁纸网站?
如何自定义建站之星模板颜色并下载新样式?
如何选择香港主机高效搭建外贸独立站?
如何彻底卸载建站之星软件?
*请认真填写需求信息,我们会在24小时内与您取得联系。