JSONP

  • 使用<script>元素做爲Ajax傳輸的技術,稱爲JSONP

  • <script>元素能夠做爲一種Ajax傳輸機制,只需設置<script>元素的src屬性(若沒有插入到document,須要插入進去),而後瀏覽器就會發送一個http請求如下載src屬性所指向的URL

  • 不受同源策略影響,可使用它們從其餘服務器請求數據

  • 包含JSON編碼數據的響應體會自動解碼(執行)

  • 當經過<script>元素調用數據時,響應內容必須用javascript函數名和圓括號包裹起來。例如:

    handleResponse(    [1,2,{"buckld": "my shoe"}])複製代碼
  • 爲了告訴服務,它在被一個<script>元素調用,必須返回一個JSONP響應,能夠經過在URL中添加 一個查詢參數,例如,追加 「?json」


一個使用 script 元素髮送 JSONP 的例子

  • script 加載後,響應內容會是一段由指定函數包裹的數據,例如,在本例中,將會是:'getJSONP.cb0({...}}‘

  • 將會執行函數getJSONP的cb0方法,並把data做爲參數傳入,從而執行callback方法

    function getJSONP (url, callback) {  let cbnum = 'cb' + getJSONP.counter++;  let cbname = 'getJSONP.' + cbnum;   if (url.indexOf('?') === -1) {    url += '?jsonp=' + cbname;  } else {    url += '&jsonp=' + cbname;  }   let script = document.createElement('script');   getJSONP[cbnum] = function (response) {    try {      callback(response)    }    finally {      delete getJSONP[cbnum]      script.parentNode.removeChild(script)    }  }   script.src = url;  document.body.appendChild(script);} getJSONP.counter = 0;複製代碼
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息