前言
- AJAX目前常问的两个面试题
1、AJAX以何种格式来交换数据?
2、跨域的需求如何解决?
这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串来描述,跨域可以通过服务器端代理来解决。
到目前为止最被推崇的方案还是用JSON来传数据,靠JSONP来跨域。而这就是本节将要讲述的内容。
JSON&&JSONP
- JSON和JSONP虽然只有一个字母的差别,但本质差距较大:
- 1、JSON是一种数据交换格式
- 2、而JSONP是开发人员创造出的一种非官方跨域数据交互协议。
通俗理解:
拿谍战片来打个比方,JSON是地下党们用来书写和交换情报的“暗号”,而JSONP则是接头方式。通俗理解,一个是传递信息格式,一个是信息给对方的传递交互协议。 - 接下来依次介绍下… …
JSON
- ** (1)什么是JSON?**
JSON是一种基于文本的数据交换方式,或者叫做数据描述格式 - (2)优势?
①基于纯文本,跨平台传递极其简单
②Javascript原生支持,后台语言几乎全部支持;
③轻量级数据格式,占用字符数量极少,特别适合互联网传递;
④可读性较强,虽然比不上XML那么一目了然,但在合理的依次缩进之后还是很容易识别的;
⑤容易编写和解析
JSONP
- 【发展】正式介绍前,先来介绍下,JSONP来源/出现缘由,以便更好地理解… …
- 1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,不管是静态/动态网页、web服务,只要是跨域请求,一律不准;
- 2、后来发现,Web页面上调用js文件时,不受跨域的影响(不仅如此,还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,比如
<script>、<img>、<iframe>
等等); - 3、于是可以分析出,当前阶段如果想通过纯web端跨域访问数据就只有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理;
- 4、恰巧有一种叫做JSON的纯字符数据格式可以简洁的描述复杂数据,而且支持被原生js支持,所以在客户端可以随意处理该格式的数据;
- 5、此时,解决方案就呼之欲出了,web客户端通过类似于调用脚本的方式,来调用跨域服务器上动态生成的js格式文件(一般以JSON为后缀)。
- 6、客户端在对JSON文件调用成功之后,也就获得了自己所需的数据,剩下的就是按照需求进行处理展现即可,这种获取远程数据的方式看起来非常像AJAX,但其实并不一样。
- 7、为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹JSON数据,这样客户端就可以随意定制函数来自动处理返回数据了。
伪命题
- 【误区】:
- 对于经常用jQuery的开发者来说,知道jQuery封装的 .