Technical support2007/08/13 17:47
views: 1651 times
超大字體(180%)放大字體(130%)原始字體(100%)
上一篇之後,繼續來發發牢騷(笑)。

之前提到過的 XAJAX 與 Smarty 的架構部份,當然這些做法是因人而異,每個人有每個人喜歡的方式,而我在這邊提供我的方式,各位就參考參考吧。

XAJAX 下載後,它的壓縮檔內容大概是這樣,這邊是以 0.2.5 stable 版本為例子,

而我們在這邊需要的是,xajax, lib, xajax_js 這三個資料夾中的檔案。共計有,
  1. xajax 部分,
    xajax.inc.php
    xajaxCompress.php
    xajaxResponse.inc.php
  2. lib 部分,
    activex_off.js
  3. xajax_js 部分,
    xajax.js
    xajax_uncompressed.js
網站裡面的架構是如此,這裡不提 Smarty 是如何配置,我只將 XAJAX 配置狀況列出。在此,我們不使用它的 lib 裡面的 activex_off.js,若要使用的人,請到他們的 docs 去查詢如何使用這個 lib。

圖中的 homedirectory 就是家目錄(root),其底下的 class 則是放置所有你能夠運用的 Class libraries 檔案。而,XAJAX 就是其中一支。接著 include 則是放置在檔案中需要呼叫的函式,是用來啟動所需要的 Class 物件的。

目錄中的配置如下,
  1. class 部分,XAJAX 在此無檔案。
  2. xajax 部分,
    xajax.inc.php
    xajaxCompress.php
    xajaxResponse.inc.php
  3. xajax_js 部分,
    xajax.js
    xajax_uncompressed.js
  4. include 部分,
    global.func.inc.php
    xajax.server.myfunction.php
OK,我來解釋一下 include 部分的東西。首先是 global.func.inc.php 這支檔案,內容是,

這是一支專門用來註冊我們所使用到的 XAJAX 的程序,它可以被放在任何的檔案裡面,目的就只有一個,宣告已經定義好的 XAJAX 函式,並啟動它,且會返回 XAJAX 所需要的 Javascript 碼 (留意到 $xajax->printJavascript 了嗎?)。

接著是 xajax.server.myfunction.php,它是 XAJAX 在 Servlet 的工作程序,內容是,

這個檔案,是做一個非常簡單的動作(就類似 Hollo world),作為從 Servlet 返回到 Client 的一個程序。

最後,我們在 homedirectory 寫一支 php 檔案來呼叫它,內容如下,

執行的結果如下,

以上,這就是簡易的 XAJAX 的應用。

再來談到 mootools。還不認識的人可以看這一篇介紹,跟這一篇應用,基本上是一個非常強大的 AJAX 套件,當然他也有屬於他自己的 HttpXMLRequest 方式及其應用,不過這裡不談那個部份,畢竟這裏有 XAJAX 可以使用,也不需要你去多花心力搞定 Servlet 與 Client 之間的關係。

在應用上,mootools 有個好處,可以控管這些程序在執行上的流程。太過於詳細的 prototype 這裡就不贅述了,說實在我自己要摸清楚可能都還得花很久的時間(笑),大抵上就看可以應用的部分應該就夠了。

重點是〝什麼時候產生回應(response)〞?

XAJAX 除了 addAlert 之外,另外有一個方法叫做 addScript,可以讓你呼叫 Client 端的 Javascript,那麼,我們就用這個地方來控制所產生的回應問題。首先是 Events,當一個回應(response)被送進程序的時候,我們由一個自訂的 Events 去接收它,或者是,我們由一個自訂的 prototype 去接收這個回應。

簡單的例子是這樣,

最快的方式是 delay,除了純回應(上述例子)之外,也可能回應是一串 HTML Code,這時候擁有 delay 的 prototype 就比較方便,可以不斷的延遲將資訊寫入 Client 的頁面上,而不至於造成回應擁塞(over response)。什麼時候會造成這樣的結果?當你大量的讀取資料庫,並將 100 筆資料作 HTML Code 處理後再輸出給 Client,這時候就會發生瀏覽器大量 Javascript 資訊的寫入,多半會造成瀏覽器沒有回應的狀況。

當然,上述的例子其實還是無法防止 Servlet 大量的對 Client 送出 Response,這時候你得對你的 XAJAX 在 Servlet 上的函式動手腳,因為 XAJAX 在 Servlet 端有極大的主控權,所以當資料量異常大量的時候,必須要考量到的就是 Client 端的接收能力是否符合需求。舉個工作上的例子,請看圖,


套用 mootools 的排序功能的時候,

也許這不是一般使用者的 PC 能夠承受的範圍(我指的是非 power user)。

AJAX 固然是有一定的方便與好處,但是,一旦遇到大宗資料處理的時候,就失去了它小而巧,小而美的那種靈活與機動性了。固然,各位真正在應用的時候,是否也能多思考一下關於這方面的問題,當然,我自己也還在摸索,畢竟要符合大眾需求,也才是真正能夠讓大眾接受的一個服務啊。

好了,廢話那麼多就嫌囉唆了,上面那個檔案我打包在這裡,想服用的人請自便。
File download, XAJAX_modify_by_hina.zip
創用 CC 授權
Creative Commons License
本創作適用 姓名標示-非商業性-禁止改作 3.0 創用 CC 授權,台灣並依循所適用的授權條款。

Bookmarks  HEMiDEMi  Technorati  Del.icio.us  Digg  funP  Yahoo!  Furl
Writer profile
author image
偏執與強迫症的患者,算不上是無可救藥,只是我已經遇上我的良醫了。
Posted by hina

Trackback URL : http://hina.ushiisland.net/blog/hinablue/trackback/333

Leave your greetings.

  1. AXIS

    跟xajax官方網站上的範例比起來

    你的這個範例的程式架構 起碼複雜了三倍以上

    很簡單的事卻迂迴了好幾個彎去完成

    只是增加自己或他人日後維護程式的難度

    可能會嚇跑不少對xajax的初學者喔

    2008/04/24 15:38 [ Permalink : Modify/Delete : Reply ]
    • 呵呵... 我知道官方的 example 很簡單明瞭啊 :P
      只是,對於維護上的事情來說
      大概是自己的習慣所致,所以並不會覺得特別難維護
      我只是將個別元件給切割開來而已啦

      當然,現在的做法剛當時寫這一篇的時候又不太相同了
      不過算是大同小異
      畢竟,某些地方方便,就會造成其他地方不方便
      魚與熊掌,不可兼得囉!

      初學者當然是不建議這麼做啦
      我是已經在有某些系統需求下才這麼做的
      配合 smarty, 與自行開發的 ajax 的狀況下
      元件切的越清楚,縱使有點複雜,對我而言還是好的 :P

      畢竟,是個人使用習慣上的問題囉!

      2008/04/24 15:59 [ Permalink : Modify/Delete ]
[登入][OpenID是?]