ajax框架

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,这能大大简化开发、调试和单元测试。更多有关的信息请访问www.technicalpursuit.com
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所有,其中没有提到许可问题。因此,只能用它帮助你产生灵感。更多有关的信息请访问www.whitefrost.com/index.jsp
B.1.8 RSLite
RSLite是远程脚本的一个实现,由Brent Ashley编写。从技术上讲,它没有利用作为Ajax核心的XMLHttpRequest对象,但是得到了更广泛的浏览器支持。如果你需要支持原来的浏览器,而这些浏览器不支持XMLHttpRequest对象,就可以试试RSLite。RSLite是相当轻量级的,已从2000年发展至今。更多有关的信息请访www.ashleyit.com/rs/rslite/
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上也能很好地使用。更多有关的信息请访问 www.modernmethod.com/sajax
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规约的讨论已经有些少了。更多有关的信息请访问 www.crockford.com/JSON/index.html
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来打包服务,但是不一定非得如此。更多有关的信息请访问https://swato.dev.java.net/doc/html /。
B.2.6 Java BluePrints
Sun的BluePrints小组一直忙于将Ajax纳入他们的解决方案目录(Solutions Catalog)中。Solutions Catalog包括一些很好的文档,描述了如何使用基本Ajax,如何实现自动完成,如何创建一个进度条以及如何验证表单。它还包括JavaServer Faces组件。为BluePrints Solutions Catalog开发的代码可以从www.java.net网站得到。
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非常简单。更多有关的信息请访问www.rubyonrails.org

目前常用的AJAX框架EXT-http://www.extjs.com/(中文:http://www.ajaxjs.com/)
Microsoft Ajax – http://ajax.asp.net

Java BluePrints – https://blueprints.dev.java.net/

Protptype – http://www.prototypejs.org/

Scriptaculus – http://script.aculo.us/

Laszlo – http://www.openlaszlo.org/

GWT – http://code.google.com/webtoolkit/

AJAX.net – http://www.ajaxpro.info/

Yahoo – http://developer.yahoo.com/yui/

Active Widgets – http://www.activewidgets.com/

Tibco General Interface – http://developer.tibco.com/

Visual Web GUI – http://www.visualwebgui.com/

Dojo – http://dojotoolkit.org/

Backbase – http://www.backbase.com/

SmartClient – http://www.smartclient.com/

Nitobi – http://www.nitobi.com/

JackBe – http://www.jackbe.com

Zimbra – http://www.zimbra.com/

Rico – http://www.openrico.org/

Spry – http://labs.adobe.com/technologies/spry/

Aflax – http://www.aflax.org/

DWR – http://getahead.org/dwr

Moo.fx – http://moofx.mad4milk.net/

Mochikit – http://www.mochikit.com/

Xajax – http://www.xajaxproject.org/

Nexaweb – http://www.nexaweb.com

Behaviour – http://www.bennolan.com/behaviour/

AJForm – http://projects.aphexcreations.net/ajform/

Qooxdoo – http://qooxdoo.org/

Bindows – http://www.bindows.net/

Tibet – http://www.technicalpursuit.com/ajax_indepth.htm

Crossvision – http://www.softwareag.com/Corporate/products/cv/appldes/default.asp

Echo2 – http://www.nextapp.com/platform/echo2/echo/

Ajax Tags – http://ajaxtags.sourceforge.net/ (JSP based)

WebWork – http://www.opensymphony.com/webwork/

Tacos – http://tacos.sourceforge.net/ (for Tapestry)

Sajax – http://www.modernmethod.com/sajax/

AjaxAC – http://ajax.zervaas.com.au/

JSPan – http://sourceforge.net/projects/jpspan

HTML_AJAX – http://pear.php.net/package/HTML_AJAX/ (PHP)

Aspects – http://ajaxaspects.blogspot.com/

WebORB – http://www.themidnightcoders.com/weborb/

TurboGears – http://www.turbogears.org/
MagicAjax – http://www.magicajax.net/