AJAX框架

到此爲止,你可能已經注意到,使用Ajax編程時有很多麻煩事。如果你要支持多個瀏覽器(現在還有誰只支持一個瀏覽器呢?),無疑會遭遇不兼容問題。單看一個簡單的動作,比如說創建XMLHttpRequest對象的一個實例,這需要先進行瀏覽器測試。一旦開始嘗試使用Ajax技術,你很快就會注意到要反覆地完成同樣的一些任務。當然,你可以收集一些常用代碼庫,甚至創建自己的框架。不過,做這個工作之前,需要先了解一下現在已經有些什麼了。
  與所有優秀技術一樣,Ajax已經催生出大量框架,有了這些框架,開發人員的日子好過多了。我們要強調一點,Ajax還很新,而且還在發展,框架領域也同樣如此。幾乎每天都有新來者,目前還看不出誰是最後的贏家。2003年6月之前,這方面的框架還不多,所以在以後的幾個月可能還會有巨大變化。
  有些框架基於客戶端,有些基於服務器端;有些專門爲特定語言設計,另外一些則與語言無關。其中絕大多數都有開源實現,但也有少數是專用的。我們不會面面俱到地談到每一個框架,而且也不可能深入分析提到的每個框架。我們的出發點很明確,就是讓你對現在有些什麼有所認識。在你讀到本附錄時,我們提到的一些工具包可能已經銷聲匿跡,另外的則可能剛剛創建。哪個框架最適合你?對於這個問題,只有你自己有發言權;不過,在框架領域穩定之前,你可以持一種保守的態度。甚至還有人在着力將各種框架合併在一起,等這個工作結束時應該會有好戲看!當你讀到本書時,情況應該會更加明朗,但也許你還想了解一下目前的情況 。
  B.1 瀏覽器端框架
  下面幾節介紹了一些瀏覽器端框架。
  B.1.1 Dojo
  Dojo是最老的框架之一,於2004年9月開始開發。這個項目的目標是建立充分利用XHR的DHTML工具包,並把重心放在可用性問題上。Dojo只有幾個文件,不用處理XHR的建立,只需調用bind方法,並傳入想調用的URL和回調方法即可。就這麼簡單。還可以使用bind方法來提交整個表單。
  Dojo有一個特性使它獨樹一幟,這就是它支持向後和向前按鈕。儘管這個特性不一定在每個瀏覽器上都能用(遺憾的是,Safari就是一個異類),但你確實可以註冊一個回調方法,在用戶點擊了向後按鈕或向前按鈕時觸發這個方法。Dojo還提供了changeURL標記,力圖解決使用Ajax所固有的書籤問題。
  Dojo看上去是相對成熟的工具包之一,它把重點放在可用性上,這一點很不錯。Dojo表現得相當穩定,在它身後還有一些支撐力量。Dojo的郵件列表相當活躍,多看一些文檔可能更有幫助。可以在dojotoolkit.org得到更多相關信息。
  B.1.2 Rico
  Rico是市場上最新的框架之一,由Sabre Airline Solutions開發,隨後又成爲開源實現。當然,rico在西班牙語裏就是rich,說明這個項目的總目標是提供一組組件來開發豐富的因特網應用。它得到了廣泛的瀏覽器支持,不過讓人不解的是Safari 並不支持Rico。
  與Dojo關注可用性不同,Rico則是針對拖放動作、數據網格和所謂的電影效果(移動部件、淡入淡出等等)而設計。Rico網站上有很多有意思的演示版(DEMO),並且提供了代碼。如果開發人員想盡快了解Rico,並且運行起來,這是一個很好的起點。相關的文檔不多,不過隨着這個框架的日漸成熟,這種情況會有所改觀。
  Rico可以作爲單個文件下載,不過你可能還需要Prototype JS庫。更多有關的信息請訪問openrico.org/home.page。
  B.1.3 qooxdoo
  qooxdoo也是Ajax框架領域的一個新成員,它提供了一個基於JavaScript的工具包來彌補HTML的不足。儘管還處在早期的alpha階段,但qooxdoo確實提供了一些相當引人注目的部件。使用qooxdoo,可以模擬標準胖客戶應用中的一些特性,如菜單條、工具提示、網格佈局和拖放支持。
  qooxdoo確實有一些有用的文檔,還對底層細節提供了很有幫助的解釋。qooxdoo的魅力顯然體現在它的複雜部分上。如果你的目標是創建瘦應用,並希望它與胖客戶應用相差無幾,就可以試試qooxdoo。更多有關的信息請訪問qooxdoo.oss.schlund.de。
  B.1.4 TIBET
  你覺得Ajax最早是什麼時候出現的?根據對此的解釋,也許會認爲TIBET可能是現存最老的框架。根據文檔所述,TIBET小組從1997年就開始開發這個工具包,他們的目標是提供企業級Ajax支持。TIBET看上去不只是包裝了XMLHttpRequest對象,它還對Web服務和底層協議提供了支持,並且提供了Google、Amazon和許多其他常用服務的預置包裝器。
  真正讓TIBET卓而不羣的是,它有一個完全交互式的基於瀏覽器的IDE,這能大大簡化開發、調試和單元測試。更多有關的信息請訪問[url]www.technicalpursuit.com[/url]。
  B.1.5 Flash/JavaScript集成包
  在Ajax之前,Flash很是風行,很多Web網站都建立在Flash平臺上。那些曾對Flash狠下一番功夫的人不想完全放棄Flash,利用這個開源項目就能同時利用Ajax技術。這個工具包在所有主要瀏覽器上都能用,使得JavaScript能夠調用ActionScript,ActionScript也能調用JavaScript。可以來回傳遞大量對象,包括日期、串和數組。
  Flash/JavaScript集成包的安裝涉及一些JavaScript文件,以及兩個用於Flash的庫函數。從頁面上調用ActionScript函數只需幾行代碼而已。有關的文檔相當少,不過,如果你想使用Ajax訪問Flash,這個工具包就很值得研究。更多有關的信息請訪問weblogs.macromedia.
  com/flashjavascript/。
  B.1.6 Google AJAXSLT
  基於Google Maps的工作,Google AJAXSLT是使用XPath的XSL轉換(XSLT)的JavaScript實現。XSLT可以把XML文檔轉換爲其他語言,如HTML。AJAXSLT允許使用JavaScript在瀏覽器上直接完成這些轉換。
  Google AJAXSLT在所有主要瀏覽器上都能工作,它是在BSD許可證下發布的。這個工具包很小,包括幾個JavaScript文件,還有一些方便的測試頁。Google AJAXSLT不是十全十美的,不過,如果Google Suggest有所提示,我們希望Google AJAXSLT的缺點能很快解決。因爲Google是最先使用Ajax的網站之一,我們會很有興致地看到在未來幾個月它還會有所增加。更多有關的信息請訪問goog-ajaxslt.sourceforge.net。
  B.1.7 libXmlRequest
  libXmlRequest框架也是比較老的一個框架,早在2003年就已經發布了。這個框架包括一個JavaScript文件,它相當於XMLHttpRequest對象的一個包裝器,提供了兩個重載的請求函數:getXml和postXml。另外,它有一些處理緩衝池和緩存的屬性,還有一些工具函數處理常見的任務,如解析來自服務器的XML以及修改DOM。
  這個工具包能在哪些瀏覽器上運行,這一點還不是很清楚,而且有關的文檔相當少。這個工具包版權歸其作者Stephen W. Cote所有,其中沒有提到許可問題。因此,只能用它幫助你產生靈感。更多有關的信息請訪問[url]www.whitefrost.com/index.jsp[/url]。
  B.1.8 RSLite
  RSLite是遠程腳本的一個實現,由Brent Ashley編寫。從技術上講,它沒有利用作爲Ajax核心的XMLHttpRequest對象,但是得到了更廣泛的瀏覽器支持。如果你需要支持原來的瀏覽器,而這些瀏覽器不支持XMLHttpRequest對象,就可以試試RSLite。RSLite是相當輕量級的,已從2000年發展至今 。更多有關的信息請訪[url]www.ashleyit.com/rs/rslite/[/url]。
  B.1.9 SACK
  SACK(簡單Ajax代碼包)開發爲一個瘦包裝器,包裝了XMLHttpRequest對象。其作者Gregory Wild-Smith認爲,其他的許多框架太過複雜,而且做了許多本不該它們完成的任務。所以他創建了SACK來簡化Ajax的開發。SACK包括幾個可以簡化服務器調用的方法。比起具體創建適當的XMLHttpRequest對象實例來說,用更少的代碼就能向服務器發送數據,並處理響應。
  SACK由一個JavaScript文件組成,其中包含很少的代碼。SACK底層軟件的發佈得到了修改X11許可(也稱爲MIT許可),與大多數開源項目一樣,它的文檔並不多,不過,入門肯定還是綽綽有餘的。SACK的真正強大之處在於它的簡單性,如果你要找的是一個基本包裝器,可以試試SACK。更多有關的信息請訪問twilightuniverse.com/projects/sack/。
  B.1.10 sarrisa
  sarissa有一點是Ajax做不到的,它以一種獨立於瀏覽器的方式對XML API提供了包裝支持。利用這個框架,創建和使用XMLHttpRequest對象實在是小菜一碟(不用檢查瀏覽器,它已經爲你處理好了)。另外,sarissa還對使用DOM提供了支持。類似於Google AJAXSLT,sarissa也支持XSLT,它模擬了IE上的Mozilla處理器。
  sarissa只包括幾個類,在GPL協議下發布。Mozilla/Firefox和IE都充分支持sarissa,只在Opera、Konqueror和Safari瀏覽器上有些函數不能用。更多有關的信息請訪問sarissa.
  sourceforge.net/doc/。
  B.1.11 XHConn
  XHConn類似於SACK,它相當於XMLHttpRequest對象的一個簡單包裝器。你不用直接使用XMLHttpRequest對象,只需首先啓動一個XHConn實例,與使用XHR同樣的方法加以處理。也就是說,無需瀏覽器檢查,並提供了一種簡單的方法來確定瀏覽器是否支持XHR(這對於需要妥善降級的網站尤其方便)。
  XHConn在Safari、IE、Mozilla、Firefox和Opera上都能工作。類似於大多數Ajax框架,這是一個開源實現,在Creative Commons License協議下發布。XHConn是一個代碼不多的文件,不過它確實做到了該做的事情——簡化Ajax。更多有關的信息請訪問xkr.us/
  code/javascript/XHConn/。
  B.2 服務器端框架
  以下介紹服務器端的框架。
  B.2.1 CPAINT
  CPAINT(跨平臺異步接口工具包)在服務器端實現Ajax,它向客戶返回文本或DOM文檔對象,以便用JavaScript處理。CPAINT在大多數主要瀏覽器上都能用,而且支持遠程腳本,在GPL協議下發布。這個項目的文檔相當完備,不過,CPAINT只支持PHP和ASP。更多有關的信息請訪問sourceforge.net/projects/cpaint/。
  B.2.2 Sajax
  利用Sajax,可以直接從JavaScript調用服務器端代碼。Sajax支持Perl、Python、Ruby和ASP等語言(不過奇怪的是,目前並不支持Java)。安裝Sajax相當簡單,只涉及針對特定服務器語言的簡單的庫。Sajax的開發社區極其活躍。已經確認的只有IE 6和Mozilla/Firefox提供Sajax支持,不過本書作者認爲它在Safari上也能很好地使用。更多有關的信息請訪問[url]www.modernmethod.com/sajax[/url]。
  B.2.3 JSON/JSON-RPC
  JavaScript對象註解(JSON)是一種文本格式,與XML很相似,可以用於交換數據。JSON的設計要保證兩方面,一方面便於人閱讀,另一方面便於機器解析,它使用了C系列語言類似的約定。與JSON相關的還有JSON-RPC,這是一個遠程過程調用(RPC)協議,類似於XML-RPC,但面向的是JSON語言。作爲規約,JSON-RPC在許多語言中都有實現,包括Java、Ruby、Python和Perl。
  由於JSON-RPC是規約,你需要知道哪個特定實現適用於你的環境,還要充分了解特定的實現。取決於具體的實現,有些實現的文檔相當完備,有些則根本沒有。開發人員的參與程度也有很大不同。關於JSON-RPC規約的討論已經有些少了。更多有關的信息請訪問 [url]www.crockford.com/JSON/index.html[/url]。
  B.2.4 Direct Web Remoting
  利用Direct Web Remoting (DWR),你能從JavaScript直接調用Java方法,就好像它們是瀏覽器的本地方法一樣。儘管後臺嚴格限制爲Java,但DWR仍然是最流行的框架之一。DWR的文檔是最棒的,還有一些有用的例子可以幫助你入門。
  安裝並不難,不過還要編輯Web應用的部署描述文件,另外要編輯DWR特定的文件。DWR配置文件指定了可以遠程創建和調用的類,而且文檔中警告用戶:從瀏覽器調用服務器確實存在一些安全問題。除了包含服務器端代碼的JAR文件,另外還有兩個JavaScript文件包含了一些輔助函數。DWR適用於一些常見的Web框架,如Struts和Tapestry,在Apache協議下發布。如果想從Web頁面調用Java方法,DWR能助你一臂之力。更多有關的信息請訪問getahead.ltd.uk/dwr/index。
  B.2.5 SWATO
  Shift Web Applications TO (SWATO)也是一個基於Java的Ajax框架解決方案。SWATO在所有Servlet 2.3或更高版本的容器中都能工作,類似於DWR,它也需要對配置文件做一些更新。有意思的是,SWATO充分利用了JSON來完成客戶和服務器之間數據的編組,與本附錄中討論的其他一些框架相似,它也允許從瀏覽器調用服務器端Java。爲了幫助開發人員,SWATO包括許多可複用的組件,如自動完成文本框等。
  與使用其他框架相比,使用SWATO要相對複雜一些,要訪問的類需要實現一個SWATO接口。不過,其文檔相當完備,對於入門來講綽綽有餘。SWATO設計爲使用Spring來打包服務,但是不一定非得如此。更多有關的信息請訪問[url]https://swato.dev.java.net/doc/html/[/url]。
  B.2.6 Java BluePrints
  Sun的BluePrints小組一直忙於將Ajax納入他們的解決方案目錄(Solutions Catalog)中。Solutions Catalog包括一些很好的文檔,描述瞭如何使用基本Ajax,如何實現自動完成,如何創建一個進度條以及如何驗證表單。它還包括JavaServer Faces組件。爲BluePrints Solutions Catalog開發的代碼可以從[url]www.java.net[/url]網站得到。
  B.2.7 Ajax.Net
  Ajax.Net之於Microsoft .NET就相當於SAJAX、DWR和SWATO之於Java。利用Ajax.Net,你能從JavaScript客戶調用.NET方法。Ajax.Net包括一個DLL,可以與VB .NET或C#一同使用。Ajax.Net的文檔很好地展示了針對各種場景的解決方案,而且能得到相關的源代碼。不過,Ajax.Net的許可協議很不明確。更多有關的信息請訪問ajax.net。
  B.2.8 Microsoft的Atlas項目
  Microsoft在Ajax領域涉足的時間已經不短了,畢竟,XMLHttpRequest對象是Microsoft發明的,而且從1998年開始就已經用在Web版本的Outlook中。Microsoft把重點放在提供一個更加健壯的開發環境上,從而讓開發人員的工作更輕鬆。Microsoft的着眼點還不只這些,還力圖提供客戶端腳本框架、ASP.NET控件和Web服務集成。Microsoft還發布了Atlas項目,作爲其ASP.NET 2.0預覽版的一部分。有Microsoft的介入,開發人員的工具包可能會比今天充實得多。更多有關的信息請訪問beta.asp.net/default.aspx?tabindex=7&t-
  abid=47。
  B.2.9 Ruby on Rails
  Rails是一個令人興奮的新Web框架,建立在Ruby語言基礎上。如今,Rails已經得到了大量關注(在Google上查一下Rails,可以找到更多信息),這是因爲使用Rails能夠快速開發基於Web的應用。開發Basecamp時,37signals小組提出名爲Rails的框架。Basecamp正是Ajax應用的主要示例,所以看到Rails對Ajax提供如此充分的支持,我們不應感到奇怪。Rails有許多內置的JavaScript庫,其中包裝了很多常用的特性,它還包含一個模塊,其中包裝了Ruby的JavaScript調用。如果你在使用Rails,就會發現Ajax非常簡單。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章