如果練習過
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
沒有留言:
張貼留言