JSON是一種正在網(wǎng)絡(luò)上慢慢興起的數(shù)據(jù)交換格式。就象AJAX并不是什么新技術(shù)一樣,JSON也沒有提供什么新格式,它基于ECMAScript標(biāo)準(zhǔn)中對ObjectLiteral的定義(ECMA-262, 11.1.5),早就被javascript支持。
格式定義非常簡單,就是通過一組鍵值對來定義一個對象。在javascript中,你可以直接將這種格式的數(shù)據(jù)賦值給一個變量,然后通過鍵名取值。相對于使用xml來作為數(shù)據(jù)交換格式,如果要在javascript里使用,首先需要創(chuàng)建一個DOMParser,然后通過DOM接口訪問節(jié)點(diǎn)對象,非常繁瑣,更不用說不同瀏覽器的實(shí)現(xiàn)中DOMParser的實(shí)現(xiàn)和DOM接口都有諸多不同。為什么大量的AJAX應(yīng)用中寧可直接返回一個HTML片斷而不是直接把XML交給javascript處理,一個主要原因就是處理XML的過程比較復(fù)雜。JSON最重要的貢獻(xiàn)就是簡化了解析數(shù)據(jù)的過程。
del.提供的在網(wǎng)頁上顯示書簽的javascript腳本就基于JSON,看一下這個腳本,再設(shè)想一下通過AJAX讀取del.提供的RSS接口來實(shí)現(xiàn)這個功能,就能體會JSON的巧妙了。
除此之外,更有人提出類似XSLT的JSONT,可以將JSON格式的內(nèi)容轉(zhuǎn)換成其他形式,雖然還暫時還沒有XSLT靈活和強(qiáng)大,至少展示了一種可能性。
JSON解決的另一個傳統(tǒng)AJAX中xmlhttprequest不能解決的問題就是跨域鏈接的問題?;诎踩紤],各種瀏覽器缺省都不允許xmlhttprequest跨域名鏈接,abc.com頁面上的xmlhttprequest是無法連接def.com的內(nèi)容的。在網(wǎng)頁中,JSON可以采用引入script元素的方式導(dǎo)入數(shù)據(jù),html中的script可以指定非本地腳本,跨域鏈接的問題得以解決。但使用這樣的方式導(dǎo)入JSON數(shù)據(jù),是一個同步的過程(是否可以用defer屬性來實(shí)現(xiàn)異步?),這點(diǎn)上不如xmlhttpreqeust靈活。