2009年3月26日 星期四

javascript 動態跨domain 要資料, use jquery and rails

JSONP
jQuery抓取跨網域外的資料(cross-domain) 運用JSONP
JSON & JSONP 簡介

javascipt 基本上是沒法跨domain 要資料的, 但是現在有一種協定JSONP

什麼是JSONP:JSONP(JSON with Padding)是一個非官方的協議,它允許在服務器端集成Script tags返回至客戶端,通過javascript callback的形式實現跨域訪問(這僅僅是JSONP簡單的實現形式)

作法是
* 使用script tag載入javascript檔的方式,可以cross domain取得資料。
* server端傳回的資料採JSON(Javascript object notation)格式。
* server端提供一項服務,接受回呼函式(callback function)名稱為參數,將傳回的資料當成回呼函式的參數,傳回對此回呼函式的呼叫(padding 所指的就是此加上回呼函式的填充動作)。當此javascript傳輸完成,client端會自動執行,呼叫此回呼函式,因此在資料傳輸完畢時可以得知。


光是說明還是看不懂的話, 用例子吧
範例

以Flickr提供的服務查詢標籤包含羅平、油菜花、sunset的公開照片,並加入參數format=json、jsoncallback=doPhoto,表示傳回資料為JSON格式,並將其填入回呼函式doPhoto的呼叫中作為參數:
會回傳一個 callback_function_name(JSON格式的資料)


上面的script tag 跑了之後, 就會像下面那樣, 就是由call 一個 function 的script, 就利用由server 拼出call function 的script , 還有被弄成參數 之 我們需要的資料

最後就是準備好你的callback function 來被call, 也就是來處理傳回的資料




我的範例 jquery & rails
Client


Rails Server 端

沒有留言: