JSON

JSON是一种正在网络上慢慢兴起的数据交换格式。就象AJAX并不是什么新技术一样,JSON也没有提供什么新格式,它基于ECMAScript标准中对ObjectLiteral的定义(ECMA-262, 11.1.5),早就被javascript支持。 格式定义非常简单,就是通过一组键值对来定义一个对象。在javascript中,你可以直接将这种格式的数据赋值给一个变量,然后通过键名取值。相对于使用xml来作为数据交换格式,如果要在javascript里使用,首先需要创建一个DOMParser,然后通过DOM接口访问节点对象,非常繁琐,更不用说不同浏览器的实现中DOMParser的实现和DOM接口都有诸多不同。为什么大量的AJAX应用中宁可直接返回一个HTML片断而不是直接把XML交给javascript处理,一个主要原因就是处理XML的过程比较复杂。JSON最重要的贡献就是简化了解析数据的过程。 del.icio.us提供的在网页上显示书签的javascript脚本就基于JSON,看一下这个脚本,再设想一下通过AJAX读取del.icio.us提供的RSS接口来实现这个功能,就能体会JSON的巧妙了。 除此之外,更有人提出类似XSLT的JSONT,可以将JSON格式的内容转换成其他形式,虽然还暂时还没有XSLT灵活和强大,至少展示了一种可能性。 JSON解决的另一个传统AJAX中xmlhttprequest不能解决的问题就是跨域链接的问题。基于安全考虑,各种浏览器缺省都不允许xmlhttprequest跨域名链接,abc.com页面上的xmlhttprequest是无法连接def.com的内容的。在网页中,JSON可以采用引入script元素的方式导入数据,html中的script可以指定非本地脚本,跨域链接的问题得以解决。但使用这样的方式导入JSON数据,是一个同步的过程(是否可以用defer属性来实现异步?),这点上不如xmlhttpreqeust灵活。