Ajax实战:Ajax的四个基本原则2011-09-06希赛网我们用到的很多框架中都已经固化了基于页面的传统应用模式,同时这些应 用模式也已经深深进入了我们的思想中。我们花几分钟来揭示出哪些核心概念是 我们需要重新思考的,以及如何从Ajax的角度来重新思考。浏览器中的是应用而不是内容在传统的基于页面的Web应用中,浏览器扮演着哑终端[7]的角色。它对用户 处于操作流程哪一阶段一无所知。这些信息全部都保存在服务器上,确切地说, 就是在用户会话上。时至今日,服务器端的用户会话早已是司空见惯。如果你使 用Java或者.NET编程,服务器端的用户会话更是标准API的一部分——还有 Request、Response、MIME类型——没有了它们简直不可想象。图1-11描绘了传 统Web应用典型的生命周期。当用户登录或者以其他方式初始化一个会话时,系统会创建几个服务器端的 对象。例如,电子商务类型的网站需要创建表示购物车以及用户身份证明的对象 。同时将浏览器站点的首页呈现给用户,这个HTML标记的数据流由模板文件以及 特定于该用户的数据和内容(例如该用户最近浏览的商品列表)组成。用户每次和服务器交互,都会获得另一个文档。在这个文档中,除了特定于 该用户的数据以外,包含的其他模板文件和数据都是相同的。浏览器总是忠实地 丢弃掉老的文档,显示新的文档,因为它是哑终端,而且也不知道还可以做些什 么。当用户选择退出或者关闭浏览器的时候,应用退出,会话消失。这个时候持 久层会把用户下次登录后需要显示的信息存储起来。Ajax则不同,它把一部分应 用逻辑从服务器端移到了浏览器端,图1-12描绘了这一情况。

图1-11 传统Web应用的生命周期。用户和应用会话的所有状态都保留在Web服 务器上。用户在会话中看到的是一系列的页面,每次页面切换都不可避免地要到 服务器上走一个来回图1-12 Ajax应用的生命周期。用户登录后,服务器交付一个客户端应用给浏 览器。这个应用可以独立处理很多的用户交互,对于自己无法独立处理的交互, 应用会以后台方式发送请求给服务器,而不会打断用户的操作流程。用户登录的时候,服务器交付给浏览器一个复杂得多的文档,其中包含大量 的JavaScript代码。这个文档将会在整个会话的生命周期内与用户相伴。在这一 过程中,随着用户与其交互,它的外观可能会发生相当大的变化。它知道如何响 应用户的输入,能够决定对于这些请求,是自行处理还是传递给Web服务器(Web 服务器再去访问数据库或者其他资源),或者通过两者结合的方式进行处理。因为这个文档在整个用户会话中都存在,所以它可以保存状态[8]。例如,购 物车的内容可以保存在浏览器中而不是服务器的会话中。