自从开始 Web 编程以来,在 Web 应用程序和桌面应用程序之间一直存在着许多取舍。例如,人们通常认为 Web 应用程序提供的用户界面类型没有桌面应用程序提供的用户界面类型那样丰富。另一方面,Web 应用程序是独立的平台,其开发机制比较简单。提供响应更及时的应用程序看似是一项简单的任务,但对于 Web 开发人员来说却是一直以来需要攻克的领域。

        传统意义上,只能通过向 Web 服务器提交新的请求来检索对用户输入所做的响应。在某些情况下,开发人员可以使用 JavaScript 在客户端上加载所有响应,从而提供更好的用户体验。此技术的常见示例是基于所选国家/地区来动态加载一系列州或省。遗憾的是,在很多情况下,不将所有响应都返回或加载到 JavaScript 要更好。返回操作会使过多的 UI 断开连接,或在客户端上需要过量的数据,这经常导致生成不易读的 JavaScript。AJAX 提供了一种新的中间选择,能够在维持及时响应和灵活性的同时利用基于服务器的应用程序。

什么是 AJAX?
        AJAX 是Asynchronous JavaScript And XML(异步 JavaScript 和 XML)的缩写,它不是一项技术,而是很多技术的集合。AJAX 使用通信技术(通常为 SOAP 和 XML)发送和接收对服务器的异步请求/响应,然后利用显示技术(JavaScript、DOM、HTML 和 CSS)处理响应。如今,使用 AJAX 的应用程序是合法的,因为多数浏览器都支持这项必需的技术。
        AJAX 到底是什么?AJAX 使您能够通过 JavaScript 调用执行服务器端方法,而不需要刷新浏览器。将它视为发生于用户后台的小型请求/响应如果您仍不清楚 AJAX 是什么,请看 Google 上的两个常见示例:Google Suggests(英文)和 Google Maps(英文)。如果您不熟悉 AJAX,这两个应用程序的响应会使您有点兴奋。

工作模型比较
        传统的web应用模型工作起来就象这样:大部分界面上的用户动作触发一个连接到Web服务器的HTTP请求。服务器完成一些处理---接收数据,处理计算,再访问其它的数据库系统,最后返回一个HTML页面到客户端。这是一个老套的模式,自采用超文本作为web使用以来,一直都这样用。

传统Web应用模型(左) 与 Ajax模型的比较(右)

        这种旧的途径让我们认识到了许多技术,但它不会产生很好的用户体验。当服务器正在处理自己的事情的时候,用户在做什么?没错,等待。每一个动作,用户都要等待。 
        很明显,如果我们按桌面程序的思维设计Web应用,我们不愿意让用户总是等待。当界面加载后,为什么还要让用户每次再花一半的时间从服务取数据?实际上,为什么老是让用户看到程序去服务器取数据呢?

        现在,通过在用户和服务器之间引入一个Ajax引擎,可以消除Web的开始-停止-开始-停止这样的交互过程. 它就像增加了一层机制到程序中,使它响应更灵敏,而它的确做到了这一点。
  不像加载一个页面一样,在会话的开始,浏览器加载了一个Ajax引擎---采用JavaScript编写并且通常在一个隐藏frame中。这个引擎负责绘制用户界面以及与服务器端通讯。Ajax引擎允许用异步的方式实现用户与程序的交互--不用等待服务器的通讯。所以用户再不不用打开一个空白窗口,看到等待光标不断的转,等待服务器完成后再响应。


传统Web应用的同步交互过程(上)和Ajax应用的异步交互过程的比较(下).

        通常要产生一个HTTP请求的用户动作现在通过JavaScript调用Ajax引擎来代替. 任何用户动作的响应不再要求直接传到服务器---例如简单的数据校验,内存中的数据编辑,甚至一些页面导航---引擎自己就可以处理它. 如果引擎需要从服务器取数据来响应用户动作---假设它提交需要处理的数据,载入另外的界面代码,或者接收新的数据---引擎让这些工作异步进行,通常使用XML, 不用再担误用户界面的交互。
 
AJAX与开发人员?

        AJAX 如何以及哪里适合您的应用程序,以及是否已经存在要根据情况而定。尽管我们已经看到使用 Ajax.NET 可以轻松地创建启用 AJAX 的解决方案,但还存在一些其他的注意事项。一个需要着重关注的问题是对您的应用程序的整体体系结构和可维护性的影响。AJAX 会进一步模糊系统的各层之间的界限,显著影响显示层、显示逻辑层和业务层。这不是 AJAX 本身的问题,而是使用方式的问题。只要您知道它很容易导致各层之间的某些冲突,并适当操作,就不会产生问题。

        使用 AJAX 的应用程序更难于维护吗?答案主要取决于您已经使用的 JavaScript 的数量,以及您组织和维护它的好坏程度。很多开发人员认为 JavaScript 难于编写、测试和调试(不是因为 JavaScript 本身,而是因为工具支持和开发人员的知识)。如果您当前正在使用 JavaScript 实现链接的下拉列表,并切换到 AJAX,您的代码可能较为容易维护(Ajax.NET 对 .NET 类型和数组的支持是重要原因)。但是,如果您使用返回方式来实现,现在您将向您的应用程序 (JavaScript) 引入崭新的语言。您将必须处理这样的情况:存在某些不参与 ViewState 的数据(这一点我们在按钮单击事件中可以看到)。

        另一个需要考虑的是 AJAX 对您的网站可用性的影响。即使 AJAX 最后能创建响应更及时的界面,开发人员仍需要注意两件事情。首先,很明显 AJAX 依赖 JavaScript。我们都知道一些用户禁用 JavaScript,一些标准要求网站使用 JavaScript 来运行,或不使用它来运行。因此,您不应假定 AJAX 功能正在运行。如果 AJAX 功能不可用,则应使您的应用程序退回到更普通的 Web 处理。其次,AJAX 应用程序可能不熟悉(即使它具有较高级别)用户习惯使用应用程序的方式。例如,通过 AJAX 执行不同功能的页可能不以用户认为的方式表现“后退”按钮、“收藏夹”菜单和其他浏览器功能。

结论
        AJAX 不只是令人兴奋的即将面世的技术,它是具体的框架,在建立 Web 应用程序时可以采用它来解决每天遇到的问题。AJAX 不仅可以创建简洁和强大的应用程序,它还可以使您提高客户满意度和竞争优势。正在讨论的 Atlas 的一些高级概念可能显著改进我们提供的产品。就个人而言,我见过的最佳的 AJAX 实现非常轻便合适。您自己的实现应为您的用户提供同样积极的体验。但是,对于某个具体问题,记住 AJAX 可能不是唯一的解决方案,也可能不是最佳的解决方案。