一、JSON
JSON是一種輕量級的數據交換格式
優點:1、基於純文本,跨平臺傳遞極其簡單;
2、Javascript原生支持,後臺語言幾乎全部支持;
3、輕量級數據格式,佔用字符數量極少;
4、可讀性較強,容易編寫和解析;
var conference = {
"Conference": "Future Marketing",
"Date": "2012-6-1",
"Address": "Beijing",
"Members":
[
{
"Name": "Bob",
"Age": 32,
"Company": "IBM",
"Engineer": true
},
{
"Name": "John",
"Age": 20,
"Company": "Oracle",
"Engineer": false
},
{
"Name": "Henry",
"Age": 45,
"Company": "Microsoft",
"Engineer": false
}
]
}
二、JSONP(JSON with padding)
可以跨域的原因:
Web頁面上調用js文件時則不受是否跨域的影響(不僅如此,我們還發現凡是擁有”src”這個屬性的標籤都擁有跨域的能力,比如<script>、<img>、<iframe>),所以可以使用JSONP來解決跨域的問題, 就是在遠程服務器端把數據裝入js文件中,供客戶端調用和進一步處理。
JSONP原理:
首先在客戶端註冊一個callback(如:'jsoncallback'), 然後把callback的名字(如:jsonp1236827957501)傳給服務器。服務端得到callback的數值後,要用jsonp1236827957501(......)把將要輸出的json內容包括起來,此時,服務器生成 json 數據才能被客戶端正確接收。然後以 javascript 語法的方式,生成一個function , function 名字就是傳遞上來的參數 jsonp。最後將 json 數據直接以入參的方式,放置到 function 中,這樣就生成了一段 js 語法的文檔,返回給客戶端。
客戶端瀏覽器,解析script標籤,並執行返回的 javascript 文檔,此時數據作爲參數,傳入到了客戶端預先定義好的 callback 函數裏。(動態執行回調函數)
三、總結
json是理想的數據交換格式,但沒辦法跨域直接獲取,於是就將json包裹(padding)在一個合法的js語句中作爲js文件傳過去。這就是json和jsonp的區別,json是想要的東西,jsonp是達到這個目的而普遍採用的一種方法,當然最終獲得和處理的還是json。所以說json是目的,jsonp只是手段。json總會用到,而jsonp只有在跨域獲取數據纔會用到。