json和jsonp的區別和各種用法
JSON(JavaScript Object Notation)和JSONP(JSON with Padding)雖然只有一個字母的差別,但其實他們根本不是一回事:JSON是一種數據交換格式,而JSONP是一種依靠開發人員的聰明才智創造出的一種非官方跨域資料互動協定。我們拿最近比較火的諜戰片來打個比方,JSON是地下黨們用來書寫和交換情報的“暗號”,而JSONP則是把用暗號書寫的情報傳遞給自己同志時使用的接頭方式,一個是描述訊息的格式,一個是訊息傳遞雙方約定的方法。
JSON的優點:
1、基於純文本,跨平台傳遞極為簡單;
2、Javascript原生支持,後台語言幾乎全部支持;
3、輕量級資料格式,佔用字元數量極少,特別適合互聯網傳遞;
4、可讀性較強,雖然比不上XML那麼一目了然,但在合理的依次縮進之後還是很容易識別的;
5、容易編寫和解析,當然前提是你要知道資料結構;
JSON的缺點當然也有,但在作者看來實在是無關緊要的東西,所以不再單獨說明。
JSON的格式或稱為規則:
JSON能夠以非常簡單的方式來描述資料結構,XML能做的它都能做,因此在跨平台方面兩者完全不分伯仲。
1、JSON只有兩種資料型別描述符,大括號{}和方括號[],其餘英文冒號:是映射符,英文逗號,是分隔符,英文雙引號"""是定義符。
2、大括號{}用來描述一組「不同類型的無序鍵值對集合」(每個鍵值對可以理解為OOP的屬性描述),方括號[]用來描述一組“相同類型的有序資料集合」(可對應OOP的陣列)。
3、上述兩種集合中若有多個子項,則透過英文逗號,進行分隔。
4、鍵值對以英文冒號:進行分隔,並且建議鍵名都加上英文雙引號”",以便於不同語言的解析。
5、JSON內部常用資料型別無非就是字串、數字、布林、日期、null 這麼幾個,字串必須用雙引號引起來,其餘的都不用,日期類型比較特殊,這裡就不展開講述了,只是建議如果客戶端沒有按日期排序功能需求的話,那麼把日期時間直接作為字串傳遞就好,可以省去很多麻煩。
// 描述一个人 var person = { "Name": "Bob", "Age": 32, "Company": "IBM", "Engineer": true }
jsonp的產生過程:
1、一個眾所周知的問題,Ajax直接請求普通文件存在跨域無權限訪問的問題,甭管你是靜態頁面、動態網頁、web服務、WCF,只要是跨域請求,一律不準;
2、不過我們又發現,Web頁面上呼叫js檔案時則不受是否跨域的影響(不僅如此,我們還發現凡是擁有」src 「這個屬性的標籤都擁有跨域的能力,例如