先構建一個新的 XMLHttpRequest 實例,注冊回調函數然后執(zhí)行請求流程,通過實際的 URL 打開請求然后發(fā)送到服務器。
回調函數的實現(xiàn)有點像你曾經經歷過的 Ajax 應用程序:
它用這種方式幫助你處理接收到的文本數據來為應用程序服務。采用 JSON接下來的文章將利用 Java 構建一個非常簡單的 JSON 服務,并在 OpenLaszlo 客戶端使用并異步顯示。
利用 Java 構建 JSON
我盡量避開服務器端 Java 技術的爭論,并假設你選擇的框架可以輸出“text/plain” mime-type 文本數據。
數據是我們將要顯示的“Person”bean:
在 OpenLaszlo 中解析 JSON
OpenLaszlo 沒有解析 JSON 的能力,但是幸運的是 Oliver Steele 開發(fā)了一個庫來實現(xiàn)。你可以從他的個人站點獲取。下載并解壓縮后,把 json.js 文件放在你的 web 目錄并把下面的代碼添加進 OpenLaszlo canvas 以激活對 JSON 的支持:
????????? 你會發(fā)現(xiàn)當按鈕點擊后,我們在本文開頭創(chuàng)建的 doXhrRequest 函數就被執(zhí)行了。
要在 text 文本字段顯示 processRequestChange 函數解析 JSON 后返回的數據,我們只要簡單的改變對應的界面元素 text 屬性即可:
優(yōu)雅的處理網絡延遲
既然是以異步方式處理請求,那么在點擊按鈕后數據到達還需要些時間,這是網絡延遲導致的。這讓用戶感到沮喪,并給應用程序留下緩慢和遲鈍的印象。一個良好的方式是當請求不能立即完成時顯示繁忙狀態(tài)指示標識。在本例中,如果數據返回超過 200 毫秒,那么就漂浮一個較透明的玻璃窗口(glass pane)在界面上,寫上“Loading...”提示。下面的 LZX 片段創(chuàng)建了該玻璃窗口:
?????????? 在 canvas 標簽關閉之前插入這段代碼,這樣就可以懸浮在任何 GUI 元素之上了。注意在默認時 'visible' 屬性被設置為 false。當要顯示玻璃窗口時可以改變該屬性值實現(xiàn)。
那么,一旦請求發(fā)起,我們要初始化一個記時器來實現(xiàn)在 200 毫秒后玻璃窗口的顯示。這個工作可以借由 XMLHttpRequest 類的 readyState 屬性值實現(xiàn),請參考類文檔詳細了解。根據我們的用例,需要檢查該屬性值是否為 1,以確認請求是否發(fā)起。這些條件判斷加在 processRequestChange 函數的開頭:
上面的代碼把加載消息(玻璃窗口)設置為可視。
最后,當數據返回或請求時間小于 200 毫秒時中斷定時器并隱藏該消息。要實現(xiàn)這樣的操作只需要添加兩行代碼到 processRequestChange 函數的初始化條件中:
????????? 結論
利用 OpenLaszlo 的 XMLHttpRequest 類和使用 JSON 服務處理任意文本數據是很簡單的。當然,我的還很簡陋并且沒有用到數據綁定組件。在 OpenLaszlo 4.0(2007 第一季度發(fā)布)發(fā)布之后,數據集組件抽象程度更高了,統(tǒng)一了與結構化數據的交互方式。即便那樣,你只需直接更新需要的可視化元素即可。
資源OpenLaszlo 項目網站:http://www.openlaszlo.orgOpenLaszlo 4.0 結構:http://www.openlaszlo.org/legalsOpenLaszlo 軟件工程師指南:http://www.openlaszlo.org/lps/docs/guideJSON 格式:http://www.json.orgSOJO Java 庫:http://sojo.sourceforge.netJSON for OpenLaszlo:http://osteele.com/sources/openlaszlo/json源文件:在這里下載請注意!引用、轉貼本文應注明原譯者:Rosen Jiang 以及出處:http://www.tkk7.com/rosen
Powered by: BlogJava Copyright © Rosen