JSON是一个轻量级的数据交换格式基于文本的数据交换方式或者也叫数据描述格式,在JS语言中,一切都是对象所以任何支持的类型都可以通过JSON来表示,比如:字符串、数字、数组、对象等,其中对象表示成键值对数据由逗号分隔,花括号保存对象,方括号保存数组,JSON是JS对象的字符串表示法,它使用文本来表示JS 对象的信息,本质上是一个字符串。
JSON的优点:
1、基于纯文本,跨平台传递极为简单;
2、JavaScript原生支持,后台语言几乎全部支持;
3、轻量级数据格式、占用字符数量极少,特别适合在互联网中传递;
4、可读性强;
5、容易编写和解析,前提是你知道数据结构;
要想实现JSON和JS 的对象转换,
1:对象转换成JSON字符串,使用JSON.stringify()方法
2:JSON转换成对象,使用JSON.parse()方法
在一些网站中,使用Ajax进行异步请求时,就是通过JSON格式的对象来传递数据的使用的格式一般为
Content-Type:application/json;charset=utf-8或者text/plain;charset=utf-8就能进行实现异步请求的数据传递,但是Ajax支持跨域的异步请求吗?答案是否定的,跨域请求是不支持的,
Ajax直接请求普通文本存在跨域权限访问的问题,不管是静态页面、动态网页、web服务、WCF等,只要是跨域请求一律不准。但是web页面上调用js文件时则不用受到跨域的影响(不仅如此,凡是有src这个属性的标签都可以具有跨域请求的能力比如:<script><img><iframe>),所以跨域请求数据只能有一种可能,那就是在远程服务器上设法把数据装进js格式的文件里,供客户端调用和进一步处理;于是就产生了一种非正式的传输协议,成为JSONP,该协议的一个要点是允许用户传递一个callback的参数给服务器端,然后服务器端返回数据时将这个callback参数作为函数来包裹在JSON数据,这样客户端就可以随意定制自己的函数来自动处理数据了,
JSONP的原理是靠jQuery的eval函数将字符串执行,字符串中是函数的名称,通过eval();将函数启动后,函数中包裹的JSON对象就可以实现数据的传递了。
总结:
1、ajax和jsonp在调用方式上很相似,目的也一样,都是请求一个url,然后处理从服务器传递过来的数据,因此jQuery和ext等框架都是把jsonp作为ajax的一种形式进行封装;
2、ajax的核心是通过XMLHttpRequest获取非本页的内容、而jsonp的核心则是动态添加<script>标签来调用服务器提供js脚本
3、ajax和jsonp的区别不在于是否跨域,ajax通过服务端代理一样可以实现跨域,jsonp同样不排斥同域的数据的获取。
4、jsonp是一个方式或者说是强制性协议,同样我们不一定非得使用json格式来传递数据,只要是字符串就行,但是不方便提供传递的公开服务。