一 定义
是JSON的一种"使用模式"
非正式的传输协议
二 核心原理
就是目标页面回调本地页面的方法 , 并带入参数
使用方法回调的原理
HTML的<script>元素是一个例外 , 利用<script>元素的这个开发策略(src属性) , 网页可以得到从其他来源动态产生的JSON资料
用JSONP找到的资料并不是JSON , 而是任意的JavaScript , 用JavaScript直译器而不是 用JSON解析器解析
三 为什么需要JSONP
由于浏览器安全限制 , 数据是不可以直接跨域(包括不同的根域名 , 二级域名 , 或不同的端口)请求的 , 除非目标域名授权你可以访问
四 解决的问题
可用于解决主流浏览器的跨域数据访问问题
为了便于客户端使用数据
五 实现跨域思路
1 利用javaScript中的src属性可以实现跨域访问
2 定义回调函数 ,
定义callback回调函数
3 返回值必须经过特殊的格式封装callback(JSON)
六 JSONP的产生
1 跨域问题
众所周知 , Ajax直接请求普通文件存在跨域无权限访问的问题
2 JS文件
Web页面上调用js文件时则不受是否跨域的影响(不仅如此 , 我们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力)
3 远程服务器与JS
于是可以判断 , 当前阶段如果想要通过纯web端跨域访问数据就只有一种可能 , 那就是在远程服务器上设法把数据装进js格式的文件里 , 供客户端调用和进一步处理
4 JSON
恰巧我们知道有一种叫做json的纯字符数据格式可以简介的描述复杂的数据 , 更巧妙的是json还被原生支持 , 所以在客户端可以随心所欲的处理这种格式的数据
5 解决方案
这样子解决方案就出来了 , web客户端通过与调用脚本一模一样的方式 , 来调用跨域服务器上的动态生成的js格式文件(一般以JSON为后缀) , 显而易见 , 服务器之所以要动态生成JSON文件 , 目的就在于把客户端需要的数据封装进去
6 客户端调用json
客户端在对json文件调用成功之后 , 也就获得了自己需要的数据 , 剩下的就是按照自己需求进行处理和展示 , 这种获取远程数据的方式看起来很像AJAX ,但其实并不一样
7 JSONP诞生
为了便于客户端使用数据 , 逐渐形成了一种非正式的传输协议 ,人们把他称作JSONP
该协议的要点就是允许用户传递一个callback参数给服务器 , 然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据 , 这样客户端就可以随意定制自己的函数来自动处理返回的数据了