JSON 和 JSONP 的聯繫與區別

一、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只有在跨域獲取數據纔會用到。

【注意】參考博客:https://www.cnblogs.com/iovec/p/5312464.html

發佈了22 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章