亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

章節
問答
課簽
筆記
評論
占位
占位

json與jsonp

JSON:把響應的結果當作 JSON 執行,并返回一個 JavaScript 對象。如果指定的是 json,響應結果作為一個對象,在傳遞給成功處理函數之前使用 jQuery.parseJSON 進行解析。 解析后的 JSON 對象可以通過該 jqXHR 對象的 responseJSON 屬性獲得的。json 的處理只要是在 ajaxConvert 方法中把結果給轉換成需要是 json 格式,這是后面的內容,這里主要研究下 jsonp 的預處理。

JSONP:是一個非官方的協議,它允許在服務器端集成 Script tags 返回至客戶端,通過javascript callback 的形式實現跨域訪問(這僅僅是 JSONP 簡單的實現形式)。JSON 系統開發方法是一種典型的面向數據結構的分析和設計方法,以活動為中心,一連串的活動的順序組合成一個完整的工作進程。

JSONP 出現的根源:

  • 跨域這個問題的產生根本原因是瀏覽器的同源策略限制,理解同源策略的限制同源策略是指阻止代碼獲得或者更改從另一個域名下獲得的文件或者信息。也就是說我們的請求地址必須和當前網站的地址相同。同源策略通過隔離來實現對資源的保護,解決這個限制的一個相對簡單的辦法就是在服務器端發送請求,服務器充當一個到達第三方資源的代理中繼。雖然是使用廣泛但是這個方法卻不夠靈活。
  • 另一個辦法就是使用框架(frames),將第三方站點的資源包含進來,但是包含進來的資源同樣要受到同源策略的限制。
  • 有一個很巧妙的辦法就是在頁面中使用動態代碼元素,代碼的源指向服務地址并在自己的代碼中加載數據。當這些代碼加載執行的時候,同源策略就不會起到限制。但是如果代碼試圖下載文件的時候執行還是會失敗,幸運的是,我們可以使用JSON(JavaScript Object Notation)來改進這個應用。

JSON 和 JSONP

與 XML 相比,JSON 是一個輕量級的數據交換格式。JSON 對于JavaScript開發人員充滿魅力的原因在于 JSON 本身就是 Javascript中的對象。

例如一個 ticker 對象:

var ticker = {symbol:'IBM',price:100}
而JSON串就是 {symbol:'IBM',price:100}
  • 這樣我們就可以在函數的參數中傳遞 JSON 數據。我們很容易掌握在函數中使用動態的 JSON 參數數據,但是我們的目的并不是這個。
  • 通過使我們的函數能夠加載動態的 JSON 數據,我們就能夠處理動態的數據,這項技術叫做 Dynamic Javascript Insertion。

index.html 中:

function showPrice(data){ 
    alert("Symbol:" + data.symbol + ", Price:" + data.price)
}

然后動態加載 ticker.js 腳本

var data = {symbol:'IBM', price:100}; 
showPrice(data);
  • 代碼通過動態加入 Javascript 代碼,來執行函數加載數據。正如之前提到過的,同源策略對于動態插入的代碼不適用。也就是你可以從不同的域中加載代碼,來執行在他們代碼中的 JSON 數據。這就是 JSONP(JSON with Padding)。注意,使用這種方法時,你必須在頁面中定義回調函數,就像上例中的 showPrice 一樣。
  • 我們通常所說的 JSONP 服務(遠程 JSON 服務),實際上就是一種擴展的支持在用戶定義函數中包含返回數據的能力。這種方法依賴于必須接受一個回調函數的名字作為參數。然后執行這個函數,處理 JSON 數據,并顯示在客戶頁面上。
所以總結其實 json 的一個核心點:允許用戶傳遞一個 callback 參數給服務端,然后服務端返回數據時會將這個 callback 參數作為函數名來包裹住 JSON 數據,這樣客戶端就可以隨意定制自己的函數來自動處理返回數據了。

 

任務

?不會了怎么辦
||

提問題

寫筆記

公開筆記
提交
||

請驗證,完成請求

由于請求次數過多,請先驗證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務號

綁定后可得到

  • · 粉絲專屬優惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復提醒
  • · 賬號支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請您關注公眾號
關注后,及時獲悉本課程動態

舉報

0/150
提交
取消
全部 精華 我要發布
全部 我要發布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費2個積分

你的積分不足,無法發表

為什么扣積分?

本次提問將花費2個積分

繼續發表請點擊 "確定"

為什么扣積分?