json和jsonp

JSON是一种数据交换格式!
 
JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议!
 
通常使用JSON来传数据,靠JSONP来跨域。
 

JSON的优势:jquery

一、基于纯文本,跨平台传递极其简单;web

二、Javascript原生支持,后台语言几乎所有支持;ajax

三、轻量级数据格式,占用字符数量极少,特别适合互联网传递;json

四、可读性较强,虽然比不上XML那么一目了然,但在合理的依次缩进以后仍是很容易识别的;跨域

五、容易编写和解析,固然前提是你要知道数据结构;
 
JSON的格式:

JSON可以以很是简单的方式来描述数据结构,XML能作的它都能作,所以在跨平台方面二者彻底不分伯仲。数组

一、JSON只有两种数据类型描述符,大括号{}和方括号[],而后英文冒号:是映射符,英文逗号,是分隔符,英文双引号”"是定义符。浏览器

二、大括号{}用来描述一组“不一样类型的无序键值对集合”(每一个键值对能够理解为OOP的属性描述),方括号[]用来描述一组“相同类型的有序数据集合”(可对应OOP的数组)。服务器

三、上述两种集合中如有多个子项,则经过英文逗号,进行分隔。数据结构

四、键值对以英文冒号:进行分隔,而且建议键名都加上英文双引号”",以便于不一样语言的解析。框架

五、JSON内部经常使用数据类型无非就是字符串、数字、布尔、日期、null 这么几个,字符串必须用双引号引发来,其他的都不用,日期类型比较特殊,这里就不展开讲述了,只是建议若是客户端没有按日期排序功能需求的话,那么把日期时间直接做为字符串传递就好,能够省去不少麻烦。
 
jsonp原理:

  一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一概不许。不过咱们又发现,Web页面上调用js文件时则不受是否跨域的影响(不只如此,咱们还发现凡是拥有"src"这个属性的标签都拥有跨域的能力,好比<script>、<img>、<iframe>)。因而能够判断,当前阶段若是想经过纯web端(ActiveX控件、服务端代理、属于将来的HTML5之Websocket等方式不算)跨域访问数据就只有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理。恰巧咱们已经知道有一种叫作JSON的纯字符数据格式能够简洁的描述复杂数据,更妙的是JSON还被js原生支持,因此在客户端几乎能够为所欲为的处理这种格式的数据。这样子解决方案就呼之欲出了,web客户端经过与调用脚本如出一辙的方式,来调用跨域服务器上动态生成的js格式文件(通常以JSON为后缀),显而易见,服务器之因此要动态生成JSON文件,目的就在于把客户端须要的数据装入进去。客户端在对JSON文件调用成功以后,也就得到了本身所需的数据,剩下的就是按照本身需求进行处理和展示了,这种获取远程数据的方式看起来很是像AJAX,但其实并不同。为了便于客户端使用数据,逐渐造成了一种非正式传输协议,人们把它称做JSONP,该协议的一个要点就是容许用户传递一个callback参数给服务端,而后服务端返回数据时会将这个callback参数做为函数名来包裹住JSON数据,这样客户端就能够随意定制本身的函数来自动处理返回数据了。 

 

JSONP的优势:它不像XMLHttpRequest对象实现的Ajax请求那样受到同源策略的限制;它的兼容性更好,在更加古老的浏览器中都 能够运行,不须要XMLHttpRequest或ActiveX的支持;而且在请求完毕后能够经过调用callback的方式回传结果。

 

JSONP的缺点:它只支持GET请求而不支持POST等其它类型的HTTP请求;它只支持跨域HTTP请求这种状况,不能解决不一样域的两个页面之间如何进行JavaScript调用的问题。

 

这里针对ajax与jsonp的异同再作一些补充说明:

一、ajax和jsonp这两种技术在调用方式上"看起来"很像,目的也同样,都是请求一个url,而后把服务器返回的数据进行处理,所以jquery和ext等框架都把jsonp做为ajax的一种形式进行了封装。

二、但ajax和jsonp其实本质上是不一样的东西。ajax的核心是经过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。

三、因此说,其实ajax与jsonp的区别不在因而否跨域,ajax经过服务端代理同样能够实现跨域,jsonp自己也不排斥同域的数据的获取。

四、还有就是,jsonp是一种方式或者说非强制性协议,如同ajax同样,它也不必定非要用json格式来传递数据,若是你愿意,字符串都行,只不过这样不利于用jsonp提供公开服务。

总而言之,jsonp不是ajax的一个特例,哪怕jquery等巨头把jsonp封装进了ajax,也不能改变着一点!
相关文章
相关标签/搜索