AngularJS中的JSONP实例解析


Posted in Javascript onDecember 01, 2016

概念

      首先呢,Json和JSONP是不一样的哦。Json呢,是众多数据存储的其中一种格式,是数据书写方式的其中一种。好比是大中华众多诗体的一种(比如说是七言诗吧)。这种诗体规定了: 这种诗体要包含题目,每行诗句的字数(7个字) 等等的文本格式。而Json所规定的文本格式是这样子的

AngularJS中的JSONP实例解析

(Json格式示意图)

   而JSONP呢,它是一种特殊的通讯方式,使用它能够轻松绕过浏览器的同源安全限制,达到加载来自不同源的资源(脚本, 图片, 其他)的效果。比如说,您是一个王国的王子,你意外地喜欢上了附近一个小城镇里面的一位漂亮年轻的姑娘(资源),你想和她见面并进一步往下发展(获取资源)。但是呢,您的父亲国王先生(浏览器)可不同意,国王认为这个姑娘不是王室的女孩(非同源的资源),配不上王子,把王子困在城堡里面的同时,还往城堡外放好多士兵监察,禁止外人进入(浏览器的同源安全限制)。但是王子对爱非常坚持,他试过多种方式与这个姑娘联系,比如说让太监欧巴带封信给漂亮姑娘(PUT,GET,POST等等),但是呢,每当到达城门的时候,士兵就会发现这封信的地址是给小姑娘的,于是屡屡禁止了太监出去(获取外部资源时,PUT,GET,POST不奏效)。于是王子想到了一种特殊的通讯方式,就是飞鸽传书(JSONP),小鸽子呢能够飞跃城堡,从而避开士兵的监察(绕过浏览器的同源安全限制),来达到与姑娘通讯的效果(与跨域资源共享CORS的通讯实现啦!O(∩_∩)O)。最终,经过九九八十一难之后,王子喜欢上了太监(∑(っ °Д °;)っ 人生处处充满惊喜...)

具体的实现方法

    要达到这种通讯效果,王子(发送请求的方式)和姑娘(服务端)都要有所准备。

 王子在发送JSONP请求的时候,首先需要一只鸽子吧(使用Jsonp), 再来呢,需要一封信绑在鸽子上(地址栏中的callback参数)

$http.jsonp("https://api.github.com?callback=CALLBACK").success(function(data){//...})

当姑娘接到小鸽子带来的信之后呢,也要把内容写在小鸽子身上的信,来回信(通过callback参数,把响应内容包装成一个JavaScript参数,并由该请求对应的回调函数来进行调用)

包装数据的方法

res.send(【callback函数】+ '('+ JSON.stringify(result) + ')');

 其他细节

    使用JSONP的时候,AngularJS会生成一个 <script> 标签并插入到DOM中进行请求,响应成功之后会把该节点删除(删除节点这点具体Angular版本不同可能会有所不同吧)

其中,CALLBACK会被替换成一个特地为此请求生成的自定义函数,即是由

$http.jsonp("https://api.github.com?callback=CALLBACK")...) 变成

<script src="https://api.github.com?callback=angular.callback._0"></script>

   因此当我们自己开发JSONP的后端服务时,要确保响应数据被包含在请求指定的回调函数中

  注意事项

   使用JSOPN有潜在的安全隐患,因为JSONP允许后端服务调用应用的JavaScript,使站点变得脆弱的同时,还可能暴露用户隐私

  文章参考

以上就是本文的全部内容,希望对大家有所帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
JQuery调webservice实现邮箱验证(检测是否可用)
May 21 Javascript
Ext JS添加子组件的误区探讨
Jun 28 Javascript
js中apply方法的使用详细解析
Nov 04 Javascript
js中的for如何实现foreach中的遍历
May 31 Javascript
javascript实现简单的贪吃蛇游戏
Mar 31 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
Jan 04 Javascript
JavaScript中Array对象用法实例总结
Nov 29 Javascript
简单实现JS倒计时效果
Dec 23 Javascript
Vue.js如何实现路由懒加载浅析
Aug 14 Javascript
vue实现pdf导出解决生成canvas模糊等问题(推荐)
Oct 18 Javascript
在vant中使用时间选择器和popup弹出层的操作
Nov 04 Javascript
浅谈Vue static 静态资源路径 和 style问题
Nov 07 Javascript
JavaScript交换两个变量值的七种解决方案
Dec 01 #Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
Dec 01 #Javascript
实例解析jQuery工具函数
Dec 01 #Javascript
Vue.js实现简单ToDoList 前期准备(一)
Dec 01 #Javascript
获取jqGrid中选择的行的数据
Nov 30 #Javascript
基于Vue.js实现简单搜索框
Mar 26 #Javascript
深入理解jQuery.data() 的实现方式
Nov 30 #Javascript
You might like
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
Javascript仿PHP $_GET获取URL中的参数
2014/05/12 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
在 Angular 中使用Chart.js 和 ng2-charts的示例代码
2017/08/17 Javascript
js防刷新的倒计时代码 js倒计时代码
2017/09/06 Javascript
Seajs源码详解分析
2019/04/02 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
[01:24:34]2014 DOTA2华西杯精英邀请赛5 24 DK VS LGD
2014/05/25 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python中的生成器和yield详细介绍
2015/01/09 Python
Python使用Turtle模块绘制五星红旗代码示例
2017/12/11 Python
python3中os.path模块下常用的用法总结【推荐】
2018/09/16 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Python中print和return的作用及区别解析
2019/05/05 Python
Python基础知识点 初识Python.md
2019/05/14 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
CSS3 真的会替代 SCSS 吗
2021/03/09 HTML / CSS
材料成型专业个人求职信范文
2013/09/25 职场文书
大学生的创业计划书就该这么写
2014/01/30 职场文书
客服专员岗位职责
2014/02/28 职场文书
春节联欢晚会主持词
2014/03/24 职场文书
市场总监岗位职责
2015/02/11 职场文书
2015年大学生工作总结
2015/04/21 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript