JSONP

Posted by Bruce Tsai
05/31/2016

JSONP其實不是一個標準,最早出處也不詳,不過早一點在 CORS 普及前就開始寫 Ajax 的人應該是很熟悉的東西,瀏覽器為了安全性問題,雖然可以跨直接用 XHR 做出 HTTP request,但是會限制跨 domain 的連線,現在有 CORS 可以讓網站所有者提供允許的白名單,但是在 CORS 普及前,基本上是完全被禁止的,不過有個方法就是插入 <script> 標籤去執行遠端的 js 檔案,這個方法的缺點就是只能執行,不能讀取檔案內容,JSONP 就是在這個限制下所設計出來可以用來跟遠端要資料的方法,基本上實做的方法就是在本地先產生好一個暫時的 callback function:

window.cb123456 = function (data) {
  window.cb123456 = null; //clean up

  //do something with data      
};

然後把遠端資源加上參數指定 callback 名稱:

<script type="text/javascript"
     src="http://server2.example.com/RetrieveUser?UserId=1823&jsonp=cb123456">
</script>

遠端收到 Request 後產生特別的 response,本來要回傳的資料如下:

{
  "name": "John",
  "gender": "Male",
  "country": "USA"
}

現在會變成一段 JavaScript 程式碼:

cb1231465({
  "name": "John",
  "gender": "Male",
  "country": "USA"
});

results matching ""

    No results matching ""