标题：ajax框架
Ajax框架介绍
Ajax(Asynchronous JavaScript And Xml)并不是一种新技术，而是整合了JavaScript、Xml、CSS等已有技术。虽然大部分开发人员在过去使用过XMLHttp或者使用Iframe来加载数据，但仅到现在我们才看到传统的开发人员和公司开始采用这些技术。就像新的编程语言或模型伴随着更多的痛苦，开发人员需要学习新的技巧及如何最好利用这些新技术。
AJAX模式
许多重要的技术和AJAX开发模式可以从现有的知识中获取。例如，在一个发送请求到服务端的应用中，必须包含请求顺序、优先级、超时响应、错误处理及回调，其中许多元素已经在Web服务中包含了，就像现在的SOA。AJAX开发人员拥有一个完整的系统架构知识。同时，随着技术的成熟还会有许多地方需要改进，特别是UI部分的易用性。
AJAX开发与传统的CS开发有很大的不同。这些不同引入了新的编程问题，最大的问题在于易用性。由于AJAX依赖浏览器的JavaScript和XML，浏览器的兼容性和支持的标准也变得和JavaScript的运行时性能一样重要了。这些问题中的大部分来源于浏览器、服务器和技术的组合，因此必须理解如何才能最好的使用这些技术。
综合各种变化的技术和强耦合的客户服务端环境，AJAX提出了一种新的开发方式。AJAX开发人员必须理解传统的MVC架构，这限制了应用层次之间的边界。同时，开发人员还需要考虑CS环境的外部和使用AJAX技术来重定型MVC边界。最重要的是，AJAX开发人员必须禁止以页面集合的方式来考虑Web应用而需要将其认为是单个页面。一旦UI设计与服务架构之间的范围被严格区分开来后，开发人员就需要更新和变化的技术集合了。
浏览器端框架
DojoDojo是最老的框架之一，于2004年9月开始开发。这个项目的目标是建立充分利用XHR的DHTML工具包，并把重心放在可用性问题上。Dojo只有几个文件，不用处理XHR的建立，只需调用bind方法，并传入想调用的URL和回调方法即可。就这么简单。还可以使用bind方法来提交整个表单。
Dojo有一个特性使它独树一帜，这就是它支持向后和向前按钮。尽管这个特性不一定在每个浏览器上都能用（遗憾的是，Safari就是一个异类），但你确实可以注册一个回调方法，在用户点击了向后按钮或向前按钮时触发这个方法。Dojo还提供了changeURL标记，力图解决使用Ajax所固有的书签问题。
Dojo看上去是相对成熟的工具包之一，它把重点放在可用性上，这一点很不错。Dojo表现得相当稳定，在它身后还有一些支撑力量。Dojo的邮件列表相当活跃，多看一些文档可能更有帮助。
TIBET
你觉得Ajax最早是什么时候出现的？根据对此的解释，也许会认为TIBET可能是现存最老的框架。根据文档所述，TIBET小组从1997年就开始开发这个工具包，他们的目标是提供企业级Ajax支持。TIBET看上去不只是包装了XMLHttpRequest对象，它还对Web服务和底层协议提供了支持，并且提供了Google、Amazon和许多其他常用服务的预置包装器。
真正让TIBET卓而不群的是，它有一个完全交互式的基于浏览器的IDE，这能大大简化开发、调试和单元测试。Flash/JavaScript集成包在Ajax之前，Flash很是风行，很多Web网站都建立在Flash平台上。那些曾对Flash狠下一番功夫的人不想完全放弃Flash，利用这个开源项目就能同时利用Ajax技术。这个工具包在所有主要浏览器上都能用，使得JavaScript能够调用ActionScript，ActionScript也能调用JavaScript。可以来回传递大量对象，包括日期、串和数组。
Flash/JavaScript集成包的安装涉及一些JavaScript文件，以及两个用于Flash的库函数。从页面上调用ActionScript函数只需几行代码而已。有关的文档相当少，不过，如果你想使用Ajax访问Flash，这个工具包就很值得研究。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的网站之一，我们会很有兴致地看到在未来几个月它还会有所增加。libXmlRequestlibXmlRequest框架也是比较老的一个框架，早在2003年就已经发布了。这个框架包括一个JavaScript文件，它相当于XMLHttpRequest对象的一个包装器，提供了两个重载的请求函数：getXml和postXml。另外，它有一些处理缓冲池和缓存的属性，还有一些工具函数处理常见的任务，如解析来自服务器的XML以及修改DOM。
这个工具包能在哪些浏览器上运行，这一点还不是很清楚，而且有关的文档相当少。这个工具包版权归其作者Stephen W. Cote所有，其中没有提到许可问题。因此，只能用它帮助你产生灵感。RSLiteRSLite是远程脚本的一个实现，由Brent Ashley编写。从技术上讲，它没有利用作为Ajax核心的XMLHttpRequest对象，但是得到了更广泛的浏览器支持。如果你需要支持原来的浏览器，而这些浏览器不支持XMLHttpRequest对象，就可以试试RSLite。RSLite是相当轻量级的，已从2000年发展至今 。SACKSACK（简单Ajax代码包）开发为一个瘦包装器，包装了XMLHttpRequest对象。其作者Gregory Wild-Smith认为，其他的许多框架太过复杂，而且做了许多本不该它们完成的任务。所以他创建了SACK来简化Ajax的开发。SACK包括几个可以简化服务器调用的方法。比起具体创建适当的XMLHttpRequest对象实例来说，用更少的代码就能向服务器发送数据，并处理响应。
SACK由一个JavaScript文件组成，其中包含很少的代码。SACK底层软件的发布得到了修改X11许可（也称为MIT许可），与大多数开源项目一样，它的文档并不多，不过，入门肯定还是绰绰有余的。SACK的真正强大之处在于它的简单性，如果你要找的是一个基本包装器，可以试试SACK。sarrisasarissa有一点是Ajax做不到的，它以一种独立于浏览器的方式对XML API提供了包装支持。利用这个框架，创建和使用XMLHttpRequest对象实在是小菜一碟（不用检查浏览器，它已经为你处理好了）。另外，sarissa还对使用DOM提供了支持。类似于Google AJAXSLT，sarissa也支持XSLT，它模拟了IE上的Mozilla处理器。
sarissa只包括几个类，在GPL协议下发布。Mozilla/Firefox和IE都充分支持sarissa，只在Opera、Konqueror和Safari浏览器上有些函数不能用。XHConnXHConn类似于SACK，它相当于XMLHttpRequest对象的一个简单包装器。你不用直接使用XMLHttpRequest对象，只需首先启动一个XHConn实例，与使用XHR同样的方法加以处理。也就是说，无需浏览器检查，并提供了一种简单的方法来确定浏览器是否支持XHR（这对于需要妥善降级的网站尤其方便）。
XHConn在Safari、IE、Mozilla、Firefox和Opera上都能工作。类似于大多数Ajax框架，这是一个开源实现，在Creative Commons License协议下发布。XHConn是一个代码不多的文件，不过它确实做到了该做的事情——简化Ajax。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。
服务器端框架
服务器端框架
以下介绍服务器端的框架。CPAINTCPAINT（跨平台异步接口工具包）在服务器端实现Ajax，它向客户返回文本或DOM文档对象，以便用JavaScript处理。CPAINT在大多数主要浏览器上都能用，而且支持远程脚本，在GPL协议下发布。这个项目的文档相当完备，不过，CPAINT只支持PHP和ASP。Sajax利用Sajax，可以直接从JavaScript调用服务器端代码。Sajax支持Perl、Python、Ruby和ASP等语言（不过奇怪的是，目前并不支持Java）。安装Sajax相当简单，只涉及针对特定服务器语言的简单的库。Sajax的开发社区极其活跃。已经确认的只有IE 6和Mozilla/Firefox提供Sajax支持，不过本书作者认为它在Safari上也能很好地使用。JSON/JSON-RPCJavaScript对象注解（JSON）是一种文本格式，与XML很相似，可以用于交换数据。JSON的设计要保证两方面，一方面便于人阅读，另一方面便于机器解析，它使用了C系列语言类似的约定。与JSON相关的还有JSON-RPC，这是一个远程过程调用（RPC）协议，类似于XML-RPC，但面向的是JSON语言。作为规约，JSON-RPC在许多语言中都有实现，包括Java、Ruby、Python和Perl。
由于JSON-RPC是规约，你需要知道哪个特定实现适用于你的环境，还要充分了解特定的实现。取决于具体的实现，有些实现的文档相当完备，有些则根本没有。开发人员的参与程度也有很大不同。关于JSON-RPC规约的讨论已经有些少了。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能助你一臂之力。SWATOShift Web Applications TO (SWATO)也是一个基于Java的Ajax框架解决方案。SWATO在所有Servlet 2.3或更高版本的容器中都能工作，类似于DWR，它也需要对配置文件做一些更新。有意思的是，SWATO充分利用了JSON来完成客户和服务器之间数据的编组，与本附录中讨论的其他一些框架相似，它也允许从浏览器调用服务器端Java。为了帮助开发人员，SWATO包括许多可复用的组件，如自动完成文本框等。
与使用其他框架相比，使用SWATO要相对复杂一些，要访问的类需要实现一个SWATO接口。不过，其文档相当完备，对于入门来讲绰绰有余。SWATO设计为使用Spring来打包服务，但是不一定非得如此。Java BluePrintsSun的BluePrints小组一直忙于将Ajax纳入他们的解决方案目录（Solutions Catalog）中。Solutions Catalog包括一些很好的文档，描述了如何使用基本Ajax，如何实现自动完成，如何创建一个进度条以及如何验证表单。它还包括JavaServer Faces组件。Ajax NetAjax Net之于Microsoft .NET就相当于SAJAX、DWR和SWATO之于Java。利用AjaxNet，你能从JavaScript客户调用.NET方法。AjaxNet包括一个DLL，可以与VB .NET或C#一同使用。AjaxNet的文档很好地展示了针对各种场景的解决方案，而且能得到相关的源代码。不过，AjaxNet的许可协议很不明确。Microsoft的Atlas项目Microsoft在Ajax领域涉足的时间已经不短了，毕竟，XMLHttpRequest对象是Microsoft发明的，而且从1998年开始就已经用在Web版本的Outlook中。Microsoft把重点放在提供一个更加健壮的开发环境上，从而让开发人员的工作更轻松。Microsoft的着眼点还不只这些，还力图提供客户端脚本框架、ASPNET控件和Web服务集成。Microsoft还发布了Atlas项目，作为其ASPNET 2.0预览版的一部分。有Microsoft的介入，开发人员的工具包可能会比今天充实得多。Ruby on RailsRails是一个令人兴奋的新Web框架，建立在Ruby语言基础上。如今，Rails已经得到了大量关注（在Google上查一下Rails，可以找到更多信息），这是因为使用Rails能够快速开发基于Web的应用。开发Basecamp时，37signals小组提出名为Rails的框架。Basecamp正是Ajax应用的主要示例，所以看到Rails对Ajax提供如此充分的支持，我们不应感到奇怪。Rails有许多内置的JavaScript库，其中包装了很多常用的特性，它还包含一个模块，其中包装了Ruby的JavaScript调用。如果你在使用Rails，就会发现Ajax非常简单。