2007年11月11日 星期日

Cross Domain Ajax and OpenSocial 跨域資料源

如果練習過 My Dojo 1.0 XDomian and OpenSocial 跨域議題,應該會注意到資料來源的位置沒有改變,下面 firebug 圖可以看出 app.json 還是掛在 Container 的網站上,這次打算將這個部份也移到 linkxd.com 網域之下。


和上次 My Dojo 1.0 XDomian and OpenSocial 跨域議題的差別在於上次只是移動 app.js,而這次要移動 app.json 到 linkxd.com/gold 目錄下,仔細觀察之下,應會發現 Cross domain 資料源 app.json 無法存取的問題,因為 app 提供的 callback 其實是 containerB.js 呼叫下載,這時候 app 的 dojo.xhrGet 其實是在 Container 中呼叫,導致要取 http://linkxd.com/gold/app.json出現 Cross Domain Ajax 問題。

app.json 一般是由資料庫動態產出的資料,這些資料至通常放在應用端,如何讓 containerB.js 取得? 一般的作法是 containerB 需要提供某種 proxy 機制來轉接這個 http://linkxd.com/gold/app.json,這樣作法代表需要動態網頁支援的網站,或是本身容器有提供,像是 Google Gadgets 就有這個機制。

這個問題可以在 Interacting with our existing codebase and date? 看到更多建議,如果狀況許可,例如金價等資料,這是只用一次的,可以考慮將原來的 app.json 包在 app.js 之中一起輸出。問題是 Ajax 通常是會一直發出新的需求,不太可能一開始就載入。

這裡要採用的方法可以參考Web Services + JSON = Dump Your Proxy或是 On-Demand Javascript - Ajax Patterns,可以自己參照網頁寫出來,不過這裡打算用現成的 Alternate Transports | The Dojo Toolkit來做。利用 dojo.io.script.get 來產出動態的 script 標籤,同時載入 app3json.js 的內容,這樣並不需要額外的服務端支援。
dojo.io.script.get(
{url: 'http://linkxd.com/gold/app3json.js'}
);
app3json.js 會有資料包在一個 callback 的呼叫裡面。
linkxdApp.mycallback({
'usdGold' : 788,
'usdOil' : 95,
'usdTwd' : 32.5,
'eurTwd' : 46.9
})

輸出的結果請參考Container B3,這時候資料的輸出已經移到 linkxd.com,完成這次的練習。程式碼可以到樂連LinkXD Download網頁下載。




去部落格曬曬陽光
LinkXD

沒有留言: