第1章10图1-3:Writely编辑中的内容为“所见即所得”(What-You-See-Is-What-You-Get,WYSIWYG)。编辑时,你会看到最后结果的内容——颜色、字体、布局等。此想法将于“富文本编辑器”(第14章)中介绍。Writely允许几个人协作,同时撰写一份文档。使用“定时刷新”(第10章)所描述的技术,就能持续更新该文档,以及其他作者的状态。文档容易管理——你能在元素上直接附加“标签”(添加关键词),以及标示“星号”(提醒注意)。另外,这是一个符合网页常规的例子。“WebRemoting模式”(第6章)描述产生永久性的改变,而无须强加页面刷新的方法。Office应用的故事说明,Ajax有足够的新材料,让你对长久以来停滞于桌面版本的应用,进行重新审视并发展它的Web版本。除Writely之外,电子表格有(NumSum,)一类的应用来支持,简报管理器也有S5()一类的应用来支持。Office以外,还有Ajax版本的实时通信客户端(Meebo,见)、终端机仿真器(Anyterm,见),甚至是编程环境(见WhytheLuckyStiff的TryRuby,)。与桌面版本的对应物相比,Web应用总是有更多的限制,但Ajax消除了这个差距,这些应用中的很多问题突然间就变得“足够地好”了。由于在浏览器里工作的固有好处,“足够地好”将大大胜过其桌面版本。Ajax应用的特性CharacteristicsofAjaxApplications在早期,Ajax被定义为“建造能交付功能丰富的、响应能力良好的、具有良好用户操作体验的标准Web技术”。这不应该被视为一件非黑即白的事,因为将Ajax想象成一组连续IntroducingAjax11的应用是有用的——甚至还包含对Flash小组件的应用,而避免使用任何远程通信技术的应用,也可以被视为部分的“Ajax应用”;如果你正在设计能够利用其他Ajax开发者经验的某个系统,这么做是有用的,这是封装在Ajax模式里的经验。在将Ajax模式文档化时,从非“纯Ajax”应用中学习确实是有用的。最后,这里所列的特性,意在作第1章12为组成Ajax应用的一般性指南,而不是严不可破的规章制度。是应用,而不只是网站最近,与“网站”(website)相比,你将听到更多有关“Web应用”(webapplication或webapp)这个词。很多驱动现代Web项目前进的观点,是以浏览器为平台,以Web为操作系统的。通过浏览器平台,人们不只是买书或浏览手册,也执行日常工作和社交往来,往往进行比过去更关键,更复杂的任务。当Ajax真的能被应用于所有运行在浏览器内的事物时,其本身完全融入了这类系统,帮助忙碌的用户产生更高的生产力。平滑,连续的交互传统的网站让你提交表单,等待几秒钟,看页面刷新,然后再一次开始整个循环。那是因为最细微的服务器交互,甚至最细微的显示改变,都得调用服务器,然后整个页面刷新。这是一段又慢又不稳定,又令人沮丧的过程。Ajax以几种方式改变了此模型。首先,跑在浏览器内的JavaScript可直接操作显示的内容——你不必只为了隐藏一个元素,或者重新安排页面,就从服务器那里送回整个新页面。其次,与服务器的交互可通过JavaScript处理,因此,你能上传用户命令和下载新信息,而没有任何页面刷新。第三,像点击鼠标和打字那样的用户操作可由JavaScript处理,因此,这样的交互远比填写表单并点击提交按钮丰富得多。所有这些加强功能都让Ajax的交互更迅速且更连续。实时由于浏览器-服务器交互不再是必须遵守的规矩,连续地由服务器取得新信息成为了可能。因此,Ajax应用能被编写为总是显示最新的新闻,关于谁在线的消息,或者发送消息给用户等。内容是实时的,是“活”的。充分的支持Ajax应用能监控用户动作,并且主动支持任何用户正在进行的工作。小到像单一键盘敲击的动作也可导致服务器的调用,在这里头,服务器的强大处理能力可以被利用,产生稍后有用的内容。例如,表单可能根据用户的输入而改变,或者值一被输入,错误消息就马上出现。IntroducingAjax13视觉效果Ajax应用看起来类似传统Web应用,但确实更容易包含更多的生气与活力。不是那种为存在而存在的绚丽动画,而是使用动画来实时传达关于目前正发生什么,及用户下一步能做什么的消息。例如,一个被删除的图标可能缓慢地缩小以至消失。第1章14为什么使用Web应用?那么Web应用最大的吸引力是什么?为什么当桌面应用似乎运作得不错时,很多开发者却改弦易辙,转向浏览器?下面的内容描述了人们转向Web平台的一些原因。人们在家里、办公室、学校、咖啡馆,以及他们的移动电话上,使用不同的计算机。将数据在线储存,是将数据与设置偏好随身携带最自然的方法。一个比有太多计算机更大的问题是完全没有计算机。全世界有很多人并没有计算机来安装桌面软件与储存数据,对他们来说,Web应用是使用特定应用,并安全保留数据唯一实际的方法。桌面应用深受某种矛盾状况之苦:用户需要被说服该桌面应用确实很有用,值得你费心安装,但是,往往只有在用户安装以后,才会发现该程序确实有用。相反地,大多数Web应用允许用户跳进来,并且立刻开始使用应用,完全避免安装的程序。很多家庭和办公室现在都有宽带,服务器硬件也比以前更好。良好的基础设施使得交付这类丰富的、交互式的应用成为可能(这类应用在90年代期间是人们对未来的展望,在当时尚且无法落实)。再者,服务器端储存变得够便宜,足以让人们将数据在线储存——最初,Gmail提供用户1GB的邮件储存空间,让全世界震惊,而现在有些新兴公司还让用户在在线储存其收集的全部音乐(例如mp3tunes.com)。Ajax背后的技术——JavaScript、DOM和WebRemoting——已经成熟并且变得更为标准化。这表示Web应用现在能被做得更具可移植性及可用性。另外,现代Web应用具有一个隐秘的好处:性能。与过去整个页面被刷新相比,聪明的开发者现在能选择多种性能优化的技术,将数据传输量减到最小。因此,性能不只因带宽增加而提升,并且因Web应用的新架构而演进。对开发者来说,现代Web应用往往比传统的GUI替代品更具生产力,特别是假如你经常要在多个平台上发布新版本。开发者只需为全部平台编写单一产品代码;他们能逐步发展、升级应用,而不是以“大爆炸”(bigbang)的风格进行。在服务器上,大多数逻辑都存在于此,开发者能使用任何他们喜欢的语言和库。开发具有丰富表现能力的Web应用在过去经常被认为是一种火箭科学(rocketscience)。但现在,这真的变得容易多了——比很多GUI环境容易很多。几个因素已经改善了开发体验:(a)开发者现在对Web架构、各式各样的库,以及相关框架(framework)更加习惯;(b)这些库和框架已经改进很多,特别是自从Ajax兴起之后;(c)浏览器现在更一致和标准化,对开发工作也提供更好的支持,例如调试工具包。IntroducingAjax15第1章16随着安全问题日益受到重视,公司现在更急于封锁桌面应用,并禁止外挂浏览器插件。公司内部网络中的Web应用往往被视为更加安全,支持更加紧密的监视与存取控制。应用开发者通常对尽可能支持更多的用户有兴趣。那些只针对MS-Windows的人不只会错过像Apple和Linux那样的操作系统,更会失去一些非传统的平台,像智能手机、家庭娱乐系统、游戏机平台等。Web应用通常是支持这些较新平台的更加灵活的方式。因特网的巨大力量之一,是与远程用户通信与协作的能力。然而,那样做,得依赖共同或跨平台的软件。因为Web浏览器在因特网所连接的计算机上几乎无所不在,Web应用是一种对通信与协作非常有吸引力的选择。新组件Ajax小组件(widget)超越标准HTML控件(control)——文字字段、菜单、按钮等。像是建造在标准HTML元素上的滑动条(slider)和进度指示器(progressindicator)等组件,正变得广受欢迎。此外,我们也看见传统的组件被加强。取代枯燥乏味的旧式表格,你可能看见可搜索、可编辑的数据表格(datagrid)。代替textarea元素,你可能看见RTF编辑器,并具有类似于多数文字处理器“所见即所得”的特征。交互的新风格不仅组件在升级,交互的风格也是。这里,Ajax开发者一直借鉴传统桌面应用环境的概念。例如,二十年来,拖曳与放置(拖放)一直是窗口环境的主要特色,但不知为什么,长久以来它一直未出现在Web环境里。现在我们越来越经常地看见它,正如稍早的Portal的例子中所描述的。其他的交互风格也变得越来越受欢迎。键盘快捷键正被用来使活动进行得更加顺畅。一些开发者正对鼠标键做更多的尝试,试验双击鼠标键,鼠标右键,以及中键。我们期望看到的是像在Opera浏览器和其他程序里一样的鼠标手势(mousegestures),任何事都是可能的。基于标准过去几年,Ajax应用只需要标准的Web浏览器,例如IE6或Firefox1.0。然而,确切的浏览器涵盖范围取决于你的目的,重点是Ajax尽量利用标准浏器览的功能,尽可能避免特定浏览器的功能特性与插件(表示超过标准技术);这也代表遵守标准的Web用户界IntroducingAjax17面的惯例。第1章18Ajax技术TheAjaxTechnologies这里是Ajax所涉及的各种技术的快速介绍。首先,有几种在因特网上一直普遍受欢迎的技术,这些技术相对为开发社区所熟知。它们在Ajax应用中普遍被使用,虽然有时是以不同的方式。HTML/XHTML像往常一样,HTML提供网页的结构。Ajax应用使用HTML文档显示初始页面,并且该文档持续被操作,以改变显示内容并建立新事件。可能的话,Ajax应该使用一种符合XML格式的HTML变种——XHTML,让文档操作更加稳固,CSS使用层叠式样式表(stylesheet)CSS让显示更丰富,并帮助将数据结构与样式细节分开。幸好,浏览器现在对CSS2的支持相当一致,因此,过去几年已经看见很多网站从以表格(table)为基础的布局(总是一团混乱),转换到更干净,更灵活,以CSS为基础的布局。从我们的观点来看,这一切中最棒的是CSS能够很容易地被JavaScript操作。只要一行代码,你就能让对象消失,将它移到页面的其他地方,或者改变它的外表。HTTP,CGI,表单提交像传统Web应用一样,Ajax通过HTTP进行通信。差别在于服务器不是返回整个页面,而是返回简明的结果,接着由浏览器里的脚本来处理。表单提交(经常是CGI风格的URL)也会被使用,但再次强调,它由程序自行启动,这表示不需要页面刷新。服务器端脚本服务器还被要求执行像数据持久化(datapersistence)和输入验证(inputvalidation)之类的任务。不过,在某些Ajax架构里,它不再执行显示或应用逻辑有关的工作,而是将这些事留给浏览器脚本来处理。Ajax也增添一些较新技术的混合,我用“较新”这个词是有相当程度的保留,因为它们当中的每一个,实际上都已经存在多年了,只是现在才变得更为人知,变成所有主要浏览器的标准,并且结合在一起,产生新的应用风格。JavaScriptIntroducingAjax19一项关于任何Ajax应用的事实:事情发生在浏览器里。JavaScript是协调浏览器活动的客户端程序语言。早在Ajax之前,Web开发者可能在他们的网页里已经写了一些JavaScript,但很少有人能够声称彻底的理解了这种语言,这种情况现在正在转变,开发者正努力掌握JavaScript,就好像他们努力学习某种服务器端语言一样。第1章20XML和DOM(文档对象模型)DOM对象是代表XML文档的分层数据结构,JavaSc