<!----><!----><!----> <!---->
Web 始终都是催生创新的温床,在它不长的历史里,以某项创造为基础进行重造和重用,以致在某些方面远远超出原始发明者意图的例子比比皆是。例如, CGI 取代了一种基于网络的文档检索协议,同时又提供了从后台数据库中取得数据并(根据实时请求)动态生成文档的能力; HTTP 首部被用来在无状态协议之上提供持续的用户会话,这使预订系统和电子商务等有状态应用成为可能;在核心协议上创建的加密层,给那些网上商店的顾客和业务应用的用户以信心。
这些突破性的技术永久地改变了人们使用 Web 的方式。时至今日,诸如服务器端页面、用户会话以及 SSL 等技术只是构建 Web 应用的日常构件,并成为所有 Web 开发人员工具箱里的必备,以至于我们认为这是理所当然的。然而, Web 创新的步伐仍然没有停止,几乎每周都会有新的 Web 框架出现。
Ajax 是近年来 Web 开发领域最大的突破性技术之一。先前的所有创新对 Web 用户界面(点击、发送请求、响应、重绘页面)的基本模式没有多大影响,直到 XMLHttpRequest ( XHR )对象 1999 年悄然出现在 IE 5 中时,这一状况才结束。该对象的使用最初是为了增强 Outlook Web Access 客户端程序,并未引起太大的关注。
2005 年,当 Google 举起 Ajax 的旗帜开发邮件( Gmail )、地图和 Suggest 等应用时,人们才开始猛然醒悟,关注起 Ajax 来。来自 Adaptive Path 公司的 Jesse James Garrett 提出了“ Ajax ”这一术语,树起一面大旗,人们云集旗下讨论 Ajax 究竟是什么,可以用它做什么。
Ajax 好像只是在等待一个名字,一旦有了,一系列令人兴奋的活动接踵而至,而人们也开始研究 Ajax 的技术本质。 Ajax 引入了一种创建 Web 应用的全新的方式。尽管这也导致有许多新的问题亟待解决,但随着 Web 开发社区不断突破新的极限,过去两年爆发了新一轮创新热潮。
沿着这种发展路线, Ajax 的基础(例如 XMLHttpRequest 对象)将重复服务器端页面、用户会话以及 SSL 的道路。处于集体无意识的 Web 开发社区犹如神助,一下子明白了 Ajax 技术的根本,并转向如何解决使用中产生的更广泛的问题。
详细信息: http://www.china-pub.com/209252
为解决这些问题,我们决定撰写本书。我们希望本书能帮助熟练的和不那么熟练的 Web 开发者完全掌握 Ajax 技术并成功创建其自己的 Ajax 应用。它可以看作是第二代 Ajax 图书:第一代 Ajax 图书介绍 Ajax 是什么,而第二代 Ajax 图书介绍可以用它做什么以及如何做。
本书从 Manning 出版社联系 Steve Benfield 并希望他成为第二代 Ajax 图书的主编开始启动,可以看作是 Dave Crane 所著畅销书《 Ajax 实战》的后续之作。后来, Steve 因故不再担任主编,于是 Jord Sonneveld 、 Bear Bibeault 和 Dave Crane 携手为你奉献了本书。
当你看完前言,我们就完成了自己的任务,因此可以坐下来分享几杯早该享用的饮料。我们希望你在阅读本书时能获得和我们写作本书时一样多的乐趣!
关于本书
Ajax 席卷了 Web 开发社区,它使 Web 开发人员得以创建以客户为中心的富因特网应用。不过它也给这些应用带来了新的复杂性和多样性。本书 抓住 Ajax 的 核心内容,提供了大量实践性技巧和可重用的代码,以帮助开发者解决创建 Ajax 解决方案时遇到的具体问题。
简要介绍 Ajax 之后,本书将带领读者领略几十个易于使用的、以解决方案为重点的示例。读者可以学会如何实现富客户端用户界面,包括拖拽 实践性策略 、有效导航、事件处理、表单项验证、状态管理、如何选择 Ajax 库、访问第三方的开放 WebAPI 等实用策略。
与传统的“ cookbook ”类图书不同,本书提供对各个技巧的深入讨论并演示如何将这些独立的组件连接起来,以创建强大的应用解决方案。本书结尾一章是令人愉快的“混搭 ( mashup ) ”,之所以选择该示例,是因为它有趣、好玩,更重要的是它很实用。
本书将帮助你:
<!---->q <!---->超越 Ajax 本身并学习如何让 Ajax 运行起来;
<!---->q <!---->掌握许多用户界面设计和站点导航的技巧;
<!---->q <!---->动手实践专业级的可重用的 Ajax 代码以解决实际问题。
读者对象
本书针对那些希望借助 Ajax 技术创建最佳富用户界面应用的 Web 开发人员。
Ajax 初学者会发现入门的前两章对快速了解异步请求的知识有帮助,但本书面向的主要读者是开发人员,他们应当至少有基本的 Web 应用开发背景并能使用基础的 JavaScript 语法实现一些客户端特效。
在前所未有的富客户端用户界面应用里,客户端代码数量迅速增多,因此这部分代码应和服务端代码同样得到重视。本书介绍了一些高级的 JavaScript 技巧帮助你组织客户端代码并有效使用 Ajax 。
如果你不仅对使用新技术扩展自身编码能力感兴趣,同时也关注如何应用编程技巧和模式来最好地利用这些技术,我们认为本书能满足你的这些需求。
无论你是老练的客户端开发人员,还是刚开始创建拥有富用户界面的新手,我们都希望本书对你能有所帮助。
阅读路线图
本书分为两部分。第一部分:“ Ajax 基础”,包含 4 章导读性的内容,以确保你在学习本书第二部分时已经消化掌握了这些技巧。第二部分“ Ajax 最佳实践”,每章都讲解了客户端编程的各种实践性主题。它们或强调直接使用 Ajax ,或强调在支持 Ajax 的应用中运行良好的实践和原则。
第 1 章深入探讨 Ajax 与其他技术的区别,并介绍为何有如此多的内容需要学习。本章提供了一个快速教程介绍如何跨浏览器使用 Ajax 以及如何处理到来的响应。最后介绍 Prototype 库如何确保整个过程更加流畅。
第 2 章讨论了 Ajax 通信的各种方式,包括 JSON 、 XML 和 XSLT 。我们还研究了 Ajax 与 SOAP Web 服务的结合使用。
第 3 章介绍了怎样使用面向对象的 JavaScript 来控制典型的 Ajax 应用都具备的客户端源代码增长问题。我们介绍的主要概念有对象构造、函数是一等对象、函数是类方法、函数上下文以及闭包等,并在面向对象技术的背景下加以介绍。最后介绍了如何使用 Prototype 库帮助我们轻松定义 JavaScript 类。
第 4 章继续讨论支持 Ajax 的 JavaScript 库并进一步讲解 Prototype 、 Dojo 工具箱 、 jQuery 和 DWR 库 ,虽然不可能完全地介绍这些库具备的各种特性,但我们特别介绍了它们给 Ajax 带来的变化。我们还会在接下来的章节的多个代码示例中看到这些库的实践用法。
第 5 章讲解事件处理,介绍了多种事件模型并特别强调了跨浏览器问题,并介绍了使用 Prototype 库以减轻跨浏览器带来的痛苦。还讨论了 Ajax 应用程序中最常用的事件类型。
第 6 章详细研究了表单数据项验证及其与上一章介绍的事件处理的联系。本章示例采用 Prototype 和 jQuery 库以获得最大好处。这些示例演示了如何截取表单提交(以前通常会引起整个页面刷新的操作)并把它重定向为不甚唐突的 Ajax 请求。
第 7 章讨论内容导航。讲解了创建简单的菜单,然后进入更加复杂的导航辅助设施如树视图、 accordion 控件、 Tab 视图和工具条等内容。我们还在本章给出了支持这些功能的 OpenRico 库 和 qooxdoo 库的相关代码。
第 8 章关注用户在浏览器中点击后退和刷新按钮导致的问题。我们会从两个角度介绍:如何避免用户出现这些问题以及如何支持后退和刷新操作。本章还会介绍如何为应用程序添加一个简单的撤销功能。
第 9 章讨论拖放。我们将研究拖放操作的原理并讨论支持拖放的 JavaScript 库。我们会介绍如何使用 Scriptaculous 实现支持项目复制的列表,并用 Scriptaculous 和 ICEfaces 实现一个简单的购物车。
第 10 章讨论关于可用性的考虑,并介绍 Ajax 怎样帮助我们解决或至少减轻网络延时的问题。讨论了通过主动提供由服务器端协助完成的帮助减少用户的挫折感,并再次回顾了表单数据验证。我们还解释了在富用户界面中如何处理多控件 Tab 键次序以及多层控件次序问题。
第 11 章介绍状态管理。我们将探索如何维护客户状态、缓存数据、预加载数据和如何持久化客户状态。我们还讨论了使用 AMASS 库持久化大量数据。
第 12 章探讨第三方开放的 API 的用法。我们学习如何避免令人畏惧的 “ Ajax 安全沙箱”使 Ajax 请求到达远程服务器,然后使用该技巧访问第三方开放的 API ,例如 Yahoo!Maps 、 Geocoding 和 Traffic 、 Google 搜索引擎以及 Flickr 照片服务等。
第 13 章以一个完整的混搭式应用结束,它使用了上一章介绍的第三方开放 API 以及本书介绍的各种技巧来创建一个完整的且可以运行的混搭式应用。
代码约定
所有源代码清单或正文中的源代码都使用一种等宽字体(例如 like this )以区别于普通文本。正文中的方法和函数名、对象属性、 XML 元素都用此类字体显示。
多数情况下,对源代码重新编排了格式。为适应本书的页面宽度,我们增加了换行并调整了缩进。在少数情况下,这样做还不够,源代码清单里还包括续行记号。另外,还从源代码清单中去掉了许多注释。
许多源代码清单都伴有代码注解,对重要概念加以说明。在一些情况下,我们加了编号,对应到代码后面的注解文字。
代码下载
本书所有示例的源代码都可以从图灵公司网站上本书页面下载下载。也可以从 http://www.manning.com/crane2 或 http://www.manning.com/AjaxinPractice 下载。
作者在线
购买本书也就意味着你可以自由访问一个由 Manning 出版社运营的私有网上论坛。你可以在该论坛上对本书发表评论、提一些技术问题并从作者或其他读者那里获得帮助。要访问此论坛并订阅其内容,请访问 http://www.manning.com/crane2 或 http://www.manning.com/AjaxinPractice 。该网页提供了注册之后如何访问论坛的说明,也介绍了你可以获得什么帮助,并且公布了论坛的规则。
Manning 出版社对读者承诺提供这样一个场所,让读者与读者之间以及读者与作者之间可以进行有意义的对话。但对作者的参与程度并不做承诺,因为作者的参与和贡献完全是自愿的(而且是无偿的)。我们建议你向作者提一些有挑战性的问题,以免作者失去兴趣。
只要本书不绝版,“作者在线”论坛和以前讨论的存档就可以从出版社的网站上访问。
封面图片
本书封面上的插图是一位苏丹女眷,苏丹家族的一位女性成员,苏丹的妻子和母亲可能都叫这个名字。插图来自一本土耳其奥斯曼帝国的服饰画册,由伦敦 Old Bond 街的 William Miller 于 1802 年 1 月 1 日出版。画册的扉页已经丢失,因此我们很难推断准确的创作时间。此书的目录同时使用英语和法语表示插图,每张图片都有创作它的两位艺术家的名字,他们一定会为其能美化两百年后的一本计算机编程图书的封面而感到惊讶。
Manning 出版社的一个编辑在位于曼哈顿西 26 街“ Garage ”的古董跳蚤市场买到了这本画册。卖主是住在土耳其安卡拉的一个美国人,交易时间是在那天他准备收摊的时候。这位编辑没带够买这本画册所需的现金,并且卖主礼貌地拒绝了他使用信用卡和支票。卖主当天晚上要飞回安卡拉,看起来好像没什么希望了。该怎么解决呢?最后通过握手来约定的老式的君子协议解决了。卖主提议通过银行转账付款,编辑在纸上抄下了收款银行的信息,随后画册就到他手里了。不用说,第二天我们就把款付给了卖主。我们感谢这位陌生人能如此信任我们的同事。这让我们回忆起了那个很久以前的美好时代。
来自奥斯曼帝国画册的图片,就像在丛书封面上出现的其他插图一样,将两个世纪之前的服饰习俗的丰富性和多样性带到我们身边。这些图片令我们回忆起那个时代的隔绝和距离,以及除了这个通信极度发达的时代之外的其他每一个历史时代。
从那以后,服饰习俗所代表的不同区域间的差异已经改变了,那个时期的丰富多彩的服饰文化也逐渐褪色。如今已经很难区分两个不同地区的居民了。也许我们应该尽量乐观地看待这些变化,文化上、视觉上的差异已经转变为更加多样化的个人生活上的差异,或者更加多样化和更加有趣的智力上和技术生活上的差异。
我们使用来自这本画册的图片作为本书的封面,这为我们带来了两个世纪之前的丰富的、多样性的区域生活。 Manning 出版社使用这种方式来赞美计算机行业中的创新性和主动性,当然,还包括其中的乐趣。
Dave 、 Bear 和 Jord