如前所述,JSON是壹種基於文本的數據交換方法,或者說數據描述格式。是否應該選擇JSON首先要關註它的優點。
JSON的優勢:
1,基於明文,跨平臺傳輸極其簡單;
2、原生支持Javascript,幾乎支持所有後臺語言;
3.輕量級數據格式,占用字符很少,特別適合互聯網傳輸;
4.可讀性強,雖然不如XML清晰,但合理縮進後很容易識別;
5、易寫易分析,當然前提是妳得懂數據結構;
當然,JSON也有它的缺點,但確實與作者無關,就不單獨說明了。
JSON的格式或規則:
JSON可以用非常簡單的方式描述數據結構,XML能做的事情它都能做,所以兩者在跨平臺方面是完全平等的。
1和JSON只有兩個數據類型描述符,大括號{}和方括號[],其余英文冒號是映射器,英文逗號是分隔符,英文雙引號" "是分隔符。
2.大括號{}用來描述壹組“不同類型的無序鍵值對”(每個鍵值對可以理解為OOP的壹個屬性描述),方括號[]用來描述壹組“相同類型的有序數據集”(對應OOP的數組)。
3.如果上述兩個集合中有多個子項,則用英文逗號分隔。
4.鍵值對用英文冒號:分隔,建議兩個鍵名都用英文雙引號" "括起來,以便於不同語言的解析。
5.JSON中常用的數據類型不外乎字符串、數字、布爾、日期和null。字符串必須用雙引號括起來,其余部分不使用。日期類型比較特殊,這裏就不說了。我只是建議,如果客戶端沒有按日期排序的功能,直接把日期時間作為字符串傳遞就好了,可以省去很多麻煩。
這就是JSON的全部內容。更多詳情請參考開發過程中的資料,深入學習。
JSONP是什麽?
先說說JSONP是怎麽產生的:
其實網上有很多關於JSONP的解釋,但都是千篇壹律,雲裏霧裏,對於很多剛接觸的人來說有點難。試著用自己的方式解釋壹下這個問題,看看有沒有幫助。
1,眾所周知的問題,Ajax直接請求普通文件有跨域非授權訪問,不管妳是靜態頁面、動態網頁、web服務還是WCF,只要是跨域請求,都是不允許的;
2.但我們也發現,在網頁上調用js文件時,不受是否跨域的影響(不僅如此,我們還發現所有帶有“src”屬性的標簽都具有跨域能力,比如
3.因此可以判斷,目前如果要通過純web (ActiveX控件、服務器代理、屬於未來HTML5的Websocket等)跨域訪問數據。),只有壹種可能,就是盡量把數據放到遠程服務器上的js格式文件中,供客戶端調用和進壹步處理;
4.恰好我們已經知道有壹種純字符數據格式叫做jsON,可以簡潔地描述復雜的數據。更棒的是JSON還支持JS原生,所以這種格式的數據在客戶端幾乎可以隨意處理;
5.這樣,解決方案就呼之欲出了。web客戶端調用跨域服務器上動態生成的js格式文件的方式與調用腳本完全相同(通常以JSON為後綴)。很明顯,服務器動態生成JSON文件的原因是為了加載客戶端需要的數據。
6.客戶端成功調用JSON文件後,獲取需要的數據,剩下的根據自己的需要進行處理和顯示。這種獲取遠程數據的方式看起來很像AJAX,但實際上是不同的。
7.為了方便客戶端使用數據,逐漸形成了壹種非正式的傳輸協議,稱為JSONP。該協議的壹個關鍵點是允許用戶向服務器傳遞壹個回調參數,然後服務器在返回數據時將JSON數據包裝成壹個函數名,這樣客戶端就可以隨意自定義自己的函數來自動處理返回的數據。
JSONP的客戶端實現;
無論是jQuery、ExtJs,還是其他支持jsonp的框架,它們在幕後做的事情都是壹樣的。我來壹步步解釋jsonp在客戶端的實現:
1,我們知道即使跨域js文件中的代碼(當然是符合web腳本的安全策略的),網頁也是可以無條件執行的。
遠程服務器remoteserver.com的根目錄下有壹個remote.js文件。代碼如下:
當jquery在處理jsonp類型的ajax時(我還是忍不住吐槽。雖然jquery也把jsonp歸類為ajax,但它們真的不壹樣),它會自動幫妳生成回調函數,取出數據供success屬性方法調用。