Ajax框架介绍
基 于XML的异步JavaScript,简称AJAX,是当前Web创新(称为Web2.0)中的一个王冠。感谢组成AJAX的各种技术,Web 应用的交互如Flickr, Backpack和Google在这方面已经有质的飞跃。这个术语源自描述从基于网页的Web应用到基于数据的应用的转换。
在基于数据的应用 中,用户需求的数据如联系人列表,可以从独立于实际网页的服务端取得并且可以被动态地写入网页中,给缓慢的Web应用体验着色使之像桌面应用一样。
你可能已经注意到,使用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
。更多有关的信息请访问 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.1.12 jquery
设计思想
简洁的思想:几乎所有操作都是以选择DOM元素(有 强大的Selector)开始,然后 是对其的操作(Chaining等特性)。
优点
小,压缩后 代码只有20多k(无压缩代码94k)。
Selector和DOM操作的方便:jQuery的Selector与mootools的 Element.Selectors.js比较,CSS Selector, XPath Selector(1.2后 已删除)
Chaining:总是返回一个jQuery对象,可以连续操作。
文档的完整,易用性(每个API都有完整的例子,这是其它框架现在不能比的),而且网上还有很 多其它的文档,书籍。
应用的广泛,包括google code也使 用了jQuery。
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。