<br/>作者:Dave Crane Eric Pascarello<br/>Dave Crane:英国资深Web开发人员,在智能家居、银行和金融系统领域应用DHTML和Ajax等客户端技术拥有丰富的经验。<br/>Eric Pascarello 资深ASP.NET开发人员,著名Java社区JavaRanch的 HTML与JavaScript版主。 <br/>Darren James 是开源Ajax框架的架构师。<br/>内容提要 <br/>本书是目前Ajax领域最为全面深入的一本著作,其中不仅有对于基础知识的介绍,还有对于Ajax开发中重大的体系架构问题的深入探讨,总结了大量Ajax开发中的设计模式,并讨论了框架、安全性与性能等等。书中提供了几个典型的例子,兼顾各种开发平台,这些例子的代码稍作修改就可以直接应用于项目开发之中,代码源文件可以从图灵网站下载。<br/>本书内容广泛且深入,同时适用于各个层次的Web应用开发人员。 <br/><br/>前言<br/>有时候,在你发觉之前,命运之神已经降临多时了。20世纪90年代初期,在我使用的各种有趣的新技术之中,一种称为JavaScript的小脚本语言刚刚崭露头角。我很快意识到,尽管名字叫JavaScript,它其实与我心爱的Java没有任何关系,但是从此它却与我结下了不解之缘。<br/>90年代后期,我开始为数字机顶盒技术的早期采用者开发软件。其中主要软件部分的用户界面完全使用JavaScript编写,我成为一个开发小组的技术负责人,负责使用这种语言编写窗口管理代码、调度程序和各种巧妙代码。“多么神奇啊!”我想,“它总是让人意想不到。”<br/>此后,我转向了要求更高的工作——为会说话的未来智能家居开发企业消息中枢(backbone)和各种用户界面组件。我是靠Java方面的技能被录用的,但是很快我又在编写奇妙的JavaScript用户界面了。令人惊奇地是,我发现一些人居然郑重其事地在用这种脚本语言来编写框架。很快,我使用了Mike Foster开发的早期版本的x库(你将在本书偶尔看到它的身影)。一天下午,在开发一个邮件和文本信息论坛时,我有了一个不可思议、令人兴奋的想法:在隐藏帧(hidden frame)中检查新的消息,无需刷新屏幕就可以将消息添加到用户界面中。经过几个小时的狂热编码,我成功了,甚至解决了如何用颜色来呈现新的消息,使得它们容易被用户注意到。“多有趣啊!”我想,随后就又回去编写那些正经代码了。我还不知道,在同一时间,Eric Costello、Erik Hatcher、Brent Ashley和其他人正在考虑相同的事情,而微软也正在为其Outlook Web Access设计XMLHttpRequest。<br/>命运之神还在紧随着我的脚步。我的下一个工作可以说是责任重大——为顶级的大型银行开发软件。我们混合使用了Java和JavaScript,并且使用了隐藏帧和其他的技巧。我的团队现在维护着超过1.5M字节的代码——除了使用由JSP生成的代码外,全部是静态的JavaScript。其中还没有算上图片资源。我们用它来开发上百个操作员使用的一个应用,这个应用管理着价值数以百万美元的帐户。你的银行帐户有可能就是使用这个软件来管理的。<br/>在此期间,我没有完全意识到,JavaScript已经长大成人了。在2005年2月,Jesse James Garrett提供了完整拼图中缺失的一块——他为我们过去几年偷偷摸摸地私自使用的“跨浏览器异步富客户端动态HTML客户服务器技术”(cross-browser-asynchronous-rich-client-dynamic-HTML-client-server technology)取了一个简洁而干脆的名字:Ajax。<br/>正如他们所说的,以后的一切已经载入史册。Ajax现在正在引起广泛兴趣。Prototype、Rico、Dojo、qooxdoo、Sarissa和许多其他框架的开发者正在编写大量优秀的代码。框架已经多得不可胜数,但是我们还是决定尝试一下。在附录C中,我们列举了大多数值得关注的框架。生活如此美好,我从来没有像现在这样享受计算机工作。<br/>我们远未大功告成,这个领域还在发展之中。当我在2005年9月对5月撰写的第一章进行最后修改时,我吃惊地看到这个领域取得的巨大进展。这个主题仍然有很多值得思考的地方,接下来两年将会令人无比兴奋。在写作本书的旅程中,我非常幸运地有Eric和Darren一路相伴。<br/>我希望你也会与我们同行——而且感到不虚此行! <br/><br/>Dava Crane<br/><br/>译者序 <br/><br/>普遍来说,中国人缺乏匠人的气质。“匠人”这个词在中国几乎是一个贬义词。例如说:“xx不过只是一个匠人”。但是其实国内的软件行业正是缺乏一大批对于自己的工作精益求精的软件工匠,这才是国内软件行业的主要问题所在。<br/>相比之下,日本人是一个非常有匠人气质的民族。手艺精湛的匠人自古以来在日本都受到普遍的尊重。在这个方面,我们需要向日本人学习的地方有很多。<br/>自从Pete McBreen所著的Software Craftsmanship(中文版名为《软件工艺》,人民邮电出版社出版)出版后,“软件工艺”为软件行业的从业者带来了“软件工程”之外的另一个重要的隐喻。在此之前,“软件工程” 这个隐喻在软件行业中一直占据着绝对的话语权。软件工艺并非是为了彻底颠覆软件工程,而是为了促使大家将目光更多地投向精研软件建造过程中的工艺问题。这本书将软件开发者分成了三个层次:学徒开发者(Apprentice Developer)、技师开发者(Journeymen Developer)和软件工匠(Craftsman)。<br/>Ajax in Action的作者无疑已经达到了软件工匠的层次,本书充分体现出了他们的技术水平。我将本书评价为大匠的杰作。时间将可以证明,本书在Ajax技术著作的殿堂中,会像米开朗基罗的大卫那样成为不朽之作。这本书就像大卫那样充满了美感,其架构的复杂、计算的精确令人敬畏,堪称是工艺学和艺术的完美结合。<br/>想要开山立派,必须高屋建瓴。达摩祖师、张三丰无不是这样的人物。本书作为Ajax技术领域的开山之作,同样也达到了这样的高度。虽然它是Ajax领域的第一本著作,但是它所达到的高度至今仍然是同类著作难以企及的。<br/>某个技术领域的第一本著作往往并不是该领域中最好的著作,例如,大量的开发实践已经证明早年那些介绍J2EE开发的书价值是有限的,直到Rod Johnson写出了经典的J2EE without EJB,对于EJB的盲目推崇才宣告结束。到目前为止,与Ajax技术相关的著作在国外已经出版了10本以上,国内也在今年开始陆续出版大量相关的著作,包括翻译和原创。然而,我们非常惊讶地发现,本书目前仍然是这个领域最为全面和深入的一本书。其中不仅包含了耐心细致介绍的基础知识以及精心设计的实战例子,更重要的是,还涵盖了对Ajax开发中重大的体系架构问题的深入探讨,并且总结出了大量Ajax开发设计模式,因此,认为本书是一本讲体系架构和设计模式的书是毫不过分的。<br/>Ajax领域的新框架和组件库层出不穷,一些功能非常简单,一些则是过度的设计或者存在着严重的设计问题。Ajax开发者对于应该选择什么样的框架感到茫然无助,毫无疑问,Ajax in Action可以帮助你。本书是目前已经出版的唯一一本深入探讨Ajax开发中的架构问题的著作,这使得它显得卓而不群。如果不去深入研究Ajax开发中的架构问题,Ajax开发领域将会再现J2EE开发领域早年的那种混乱局面,本书将会使得Ajax开发秩序井然。我们需要的不完全是技术本身,还需要思考和选择的眼光。Ajax in Action正是能够带给读者选择的眼光的著作。它使读者能够全方位地理解Ajax开发,不仅仅是看到众多的树木,更重要地是看到整片的森林。架构设计的合理性和灵活性将是选择Ajax框架的一个首要因素,将能决定任何Ajax框架未来的命运。一年之后,存在架构设计问题的很多框架都将会退出历史舞台。<br/>尽管如此,作者并不是只讨论重大的架构问题,而忽略了具体的实现细节,这样往往会流于空泛。作者不仅仅是卓越的评论家,更是卓越的实干家。对于书中介绍的每一个架构和模式都给出了精心设计的例子。对于Ajax开发需要的所有基础知识,作者都通过例子做了耐心细致的讲解。书中花费了一半的篇幅阐述了大量Ajax开发的实例,展示了Ajax开发的方方面面。每一个实例中的代码最后都被重构为一个可以重用的组件,这些组件的不需要做任何修改,或者只需要稍作修改就可以直接应用在读者的项目开发之中,帮助用户得到更好的交互体验。<br/>在本书中,有令人高山仰止的体系架构和设计模式的分析,有潺潺流水式的深入细致的实例讲解。娓娓道来,带给读者100%一对一的阅读体验,虽然讨论的内容很多,但是达到了形散神不散的效果,这个神就是改善Web应用的可用性,可以说,本书中所有关注的问题都是与改善Web应用的可用性相关的。这正是Ajax技术诞生的使命,也应该是任何一个Ajax开发者需要牢记的。Ajax开发并不是一个纯粹的技术问题,因为这里还涉及到另一个重要的利益相关人,就是最终用户。我们始终要把最终用户的感受放在首要位置,才能开发出出色的Ajax应用。<br/>这本书因为其内容的广泛和深入,同时适合于Ajax开发的初学者和提高者,两种类型的开发者都能从中得到巨大的收获。对于Ajax开发者来说,本书可以作为案头常备的著作。作者就像是一位吹着笛子的魔法师,循序渐进、深入浅出地将读者领进了Ajax这个迷人的殿堂。本书堪称是一片富饶的宝藏,等待着你——勇敢的探险家去探索和发现。<br/>李锟<br/>2006年4月4日于上海<br/><br/>目录<br/><br/>第一部分 重新思考Web应用 <br/>第1章 一种新的Web设计方法 <br/>1.1 为什么需要Ajax富客户端? <br/>1.1.1 比较用户体验 <br/>1.1.2 网络延迟 <br/>1.1.3 异步交互 <br/>1.1.4 独占或瞬态的使用模式 <br/>1.1.5 忘掉Web <br/>1.2 Ajax的四个基本原则 <br/>1.2.1 浏览器中的是应用而不是内容 <br/>1.2.2 服务器交付的是数据而不是内容 <br/>1.2.3 用户交互变得流畅而连续 <br/>1.2.4 有纪律的严肃编程 <br/>1.3 真实世界中的Ajax富客户端 <br/>1.3.1 现状 <br/>1.3.2 Google Maps <br/>1.4 Ajax的替代方案 <br/>1.4.1 基于Macromedia Flash的方案 <br/>1.4.2 Java Web Start及其相关技术 <br/>1.5 小结 <br/>1.6 资源 <br/>第2章 Ajax新手上路 <br/>2.1 Ajax的关键元素 <br/>2.2 用JavaScript改善用户体验 <br/>2.3 用CSS定义应用的外观 <br/>2.3.1 CSS选择器 <br/>2.3.2 CSS样式属性 <br/>2.3.3简单的CSS例子 <br/>2.4 用DOM组织视图 <br/>2.4.1 使用JavaScript操作DOM <br/>2.4.2 寻找DOM节点 <br/>2.4.3 创建DOM节点 <br/>2.4.4 为文档增加样式 <br/>2.4.5 捷径:使用innerHTML属性 <br/>2.5 使用XML技术异步加载数据 <br/>2.5.1 IFrame <br/>2.5.2 XMLDocument和XMLHttpRequest对象 <br/>2.5.3 向服务器发送请求 <br/>2.5.4 使用回调函数监视请求 <br/>2.5.5 完整的生命周期 <br/>2.6 Ajax有何不同 <br/>2.7 小结 <br/>2.8 资源 <br/>第3章 使Ajax秩序井然 <br/>3.1 从混沌到秩序 <br/>3.1.1 模式:创造一个通用的词汇 <br/>3.1.2 重构与Ajax <br/>3.1.3 保持均衡 <br/>3.1.4 重构实战 <br/>3.2 一些小型重构的案例研究 <br/>3.2.1 跨浏览器不一致性:Facade和Adapter模式 <br/>3.2.2 管理事件处理函数:Observer模式 <br/>3.2.3 重用用户操作处理函数:Command模式 <br/>3.2.4 保持对资源的唯一引用:Singleton模式 <br/>3.3 模型-视图-控制器 <br/>3.4 Web服务器端的MVC <br/>3.4.1 不使用模式的Ajax Web服务器 <br/>3.4.2 重构领域模型 <br/>3.4.3 从表现中分离内容 <br/>3.5 第三方的库和框架 <br/>3.5.1 跨浏览器库 <br/>3.5.2 UI组件和UI组件套件 <br/>3.5.3 应用框架 <br/>3.6 小结 <br/>3.7 资源 <br/>第二部分 核心技术 <br/>第4章 作为应用的页面 <br/>4.1一种不同类型的MVC <br/>4.1.1 以不同的规模重复MVC模式 <br/>4.1.2 在浏览器端应用MVC <br/>4.2 Ajax 应用中的视图 <br/>4.2.1 将逻辑从视图中分离 <br/>4.2.2 保持视图与逻辑的分离 <br/>4.3 Ajax 应用中的控制器 <br/>4.3.1 传统的JavaScript事件处理函数 <br/>4.3.2 W3C 事件模型 <br/>4.3.3 在JavaScript中实现灵活的事件模型 <br/>4.4 Ajax 应用中的模型 <br/>4.4.1 使用JavaScript为业务领域建模 <br/>4.4.2 与服务器交互 <br/>4.5 从模型生成视图 <br/>4.5.1 JavaScript对象的反射 <br/>4.5.2 处理数组和对象 <br/>4.5.3 添加控制器 <br/>4.6 小结 <br/>4.7 资源 <br/>第5章 服务器的角色 <br/>5.1 与服务器配合工作 <br/>5.2 编写服务器端代码 <br/>5.2.1 流行的实现语言 <br/>5.2.2 N层体系架构 <br/>5.2.3 维护客户端和服务器端的领域模型 <br/>5.3 大局观:通用的服务器端设计 <br/>5.3.1 不使用框架进行简单的Web服务器编码 <br/>5.3.2 使用Model2工作流框架 <br/>5.3.3 使用基于组件的框架 <br/>5.3.4 使用面向服务的体系架构 <br/>5.4 细节:交换数据 <br/>5.4.1 仅限于客户端的交互 <br/>5.4.2 介绍行星浏览器的例子 <br/>5.4.3 从Web页面的角度思考:以内容为中心的交互 <br/>5.4.4 从插件的角度思考:以脚本为中心的交互 <br/>5.4.5 从应用的角度思考:以数据为中心的交互 <br/>5.5 向服务器写数据 <br/>5.5.1 使用HTML表单 <br/>5.5.2 使用XMLHttpRequest对象 <br/>5.5.3 有效地管理用户的更新 <br/>5.6 小结 <br/>5.7 资源 <br/>第三部分 专业级的Ajax <br/>第六章 用户体验 <br/>6.1 做正确的事:开发高质量的应用 <br/>6.1.1 响应性 <br/>6.1.2 健壮性 <br/>6.1.3 一致性 <br/>6.1.4 简单性 <br/>6.1.5 付诸实践 <br/>6.2 让用户知情 <br/>6.2.1 处理自己请求的响应 <br/>6.2.2 处理其他用户提交的更新 <br/>6.3 为Ajax设计通知系统 <br/>6.3.1 对通知建模 <br/>6.3.2 定义用户界面需求 <br/>6.4 实现通知框架 <br/>6.4.1 显示状态栏图标 <br/>6.4.2显示详细的通知信息 <br/>6.4.3 集成 <br/>6.5使用通知框架处理网络请求 <br/>6.6 表示数据的时效性 <br/>6.6.1定义简单的突出显示格式 <br/>6.6.2 用Scriptaculous效果库进行突出显示 <br/>6.7 小结 <br/>6.8 资源 <br/>第7章 安全性与Ajax <br/>7.1 JavaScript与浏览器安全性 <br/>7.1.1 引入来源服务器策略 <br/>7.1.2 Ajax的相关考虑 <br/>7.1.3 子域问题 <br/>7.1.4 跨浏览器安全性 <br/>7.2 使用远程服务进行通信 <br/>7.2.1 代理远程服务 <br/>7.2.2 使用Web服务 <br/>7.3 保护机密数据 <br/>7.3.1 中间人 <br/>7.3.2 使用安全HTTP <br/>7.3.3 在普通HTTP上使用JavaScript加密数据 <br/>7.4 Ajax数据流的访问策略 <br/>7.4.1 设计安全的Web层 <br/>7.4.2 限制对Web数据的访问 <br/>7.5 小结 <br/>7.6 资源 <br/>第8章 性能 <br/>8.1 什么是性能? <br/>8.2 JavaScript执行速度 <br/>8.2.1 测定应用时间的艰难方式 <br/>8.2.2 使用Venkman性能分析器 <br/>8.2.3 优化Ajax应用的执行速度 <br/>8.3 JavaScript内存使用量 <br/>8.3.1 避免内存泄漏 <br/>8.3.2 Ajax的特殊考虑因素 <br/>8.4 考虑性能的设计 <br/>8.4.1 测量内存使用量 <br/>8.4.2简单示例 <br/>8.4.3 结果:如何将内存使用量缩减150倍 <br/>8.5 小结 <br/>8.6 资源 <br/>第四部分 Ajax实例研究 <br/>第9章 动态双组合功能 <br/>9.1 双组合脚本 <br/>9.1.1 客户端解决方案的局限性 <br/>9.1.2 服务器端解决方案的限制 <br/>9.1.3 基于Ajax的解决方案 <br/>9.2 客户端体系架构 <br/>9.2.1 设计表单 <br/>9.2.2 设计客户端/服务器端交互 <br/>9.3 服务器端的VB.NET实现 <br/>9.3.1 定义XML响应格式 <br/>9.3.2 编写服务器端代码 <br/>9.4 显示结果 <br/>9.4.1 遍历XML文档 <br/>9.4.2 应用CSS <br/>9.5 高级问题 <br/>9.5.1 允许多选择查询 <br/>9.5.2 将双组合扩展为三组合 <br/>9.6 重构 <br/>9.6.1 新的和改进过的net.ContentLoader <br/>9.6.2 创建双组合组件 <br/>9.7 小结 <br/>第10章 输入前提示 <br/>10.1 10.1 考察输入前提示应用 <br/>10.1.3 10.1.1常见的输入前提示的特征 <br/>10.1.4 10.1.2 Google Suggest <br/>10.1.3 实战开发Ajax输入前提示 <br/>10.2 服务器端框架:C# <br/>10.2.1 服务器与数据库 <br/>10.2.2 测试服务器端代码 <br/>10.3 客户端框架 <br/>10.3.1 HTML <br/>10.3.2 JavaScript <br/>10.3.3 访问服务器 <br/>10.4 添加功能:包含不同查询的多个元素 <br/>10.5 10.5 重构 <br/>10.5.1 第一天:开发TextSuggest组件的游戏计划 <br/>10.5.2 第2天:创建TextSuggest――清晰而且可配置 <br/>10.5.3 第3天:激活Ajax <br/>10.5.4 第4天:事件处理 <br/>10.5.5 第5天:提示的弹出框的UI <br/>10.5.6 重构报告 <br/>10.6 小结 <br/>第11章 增强的Ajax Web门户 <br/>11.1 正在进化的门户 <br/>11.1.1 传统门户 <br/>11.1.2 拥有丰富的用户界面的门户 <br/>11.2 使用Java的Ajax门户的体系架构 <br/>11.3 Ajax登录 <br/>11.3.1 用户表 <br/>11.3.2 服务器端的登录代码:用Java实现 <br/>11.3.3 客户端登录框架 <br/>11.4 实现DHTML窗口 <br/>11.4.1 门户窗口数据库 <br/>11.4.2 门户窗口的服务器端代码 <br/>11.4.3 添加外部JS库 <br/>11.5 添加Ajax自动保存功能 <br/>11.5.1 修改库的代码 <br/>11.5.2 自动保存信息到数据库 <br/>11.6 重构 <br/>11.6.1 定义构造器 <br/>11.6.2 修改AjaxWindows.js库 <br/>11.6.3 指定protal命令 <br/>11.6.4 执行Ajax处理 <br/>11.6.5 重构报告 <br/>11.7 小结 <br/>第12章 使用XSLT的动态搜索 <br/>12.1 理解搜索技术 <br/>12.1.1 考察传统的搜索 <br/>12.1.2 帧和弹出窗口方法的缺点 <br/>12.1.3 研究使用Ajax和XSLT的动态搜索 <br/>12.1.4 向客户端发回结果 <br/>12.2 客户端的代码 <br/>12.2.1 设置客户端 <br/>12.2.2 启动搜索过程 <br/>12.3 服务器端的PHP代码 <br/>12.3.1创建XML文档 <br/>12.3.2 创建XSLT文档 <br/>12.4合并XSLT和XML文档 <br/>12.4.1 使用微软的IE <br/>12.4.2 使用Mozilla <br/>12.5 完成搜索 <br/>12.5.1 应用层叠样式表 <br/>12.5.2 改善搜索 <br/>12.5.3 决定使用XSLT <br/>12.5.4 克服Ajax书签支持的缺陷 <br/>12.6 重构 <br/>12.6.1 XSLTHelper <br/>12.6.2 动态搜索组件 <br/>12.6.3 重构报告 <br/>12.7 小结 <br/>第13章 使用AJAX创建独立的应用<br/>13.1 从外部读取信息 <br/>13.1.1 查找XML提要 <br/>13.1.2 RSS结构 <br/>13.2 创建丰富的用户界面 <br/>13.2.1 流程 <br/>13.2.2不使用表格的HTML框架 <br/>13.2.3 采用CSS方法做排版 <br/>13.3 加载RSS提要 <br/>13.3.1 全局作用域 <br/>13.3.2 Ajax预加载功能 <br/>13.4 增加丰富的渐变效果 <br/>13.4.1 跨浏览器的不透明规则 <br/>13.4.2 实现淡入/淡出渐变 <br/>13.4.3 集成JavaScript定时器 <br/>13.5 附加功能 <br/>13.5.1 插入额外提要 <br/>13.5.2集成跳过和暂停功能 <br/>13.6 避免项目的限制 <br/>13.6.1克服Mozilla的安全限制 <br/>13.6.2修改应用的范围 <br/>13.7 重构 <br/>13.7.1 RSS阅读器模型 <br/>13.7.2 RSS阅读器视图 <br/>13.7.3 RSS阅读器控制器 <br/>13.7.4 重构报告 <br/>13.8 小结 <br/>附录A Ajax工具箱 <br/>A.1 选择正确的工具集更加聪明地工作 <br/>A.1.1获取适合的工具 <br/>A.1.2 创建自己的工具 <br/>A.1.3 维护工具箱 <br/>A.2 编辑器和IDE <br/>A.2.1 在代码编辑器中需要什么功能 <br/>A.2.2 当前的工具 <br/>A.3 调试器 <br/>A.3.1为什么要使用调试器 <br/>A.3.2 JavaScript调试器 <br/>A.3.3 HTTP 调试器 <br/>A.3.4创建自己的跨浏览器输出控制台 <br/>A.4 DOM 检查器 <br/>A.4.1 使用Mozilla DOM 检查器 <br/>A.4.2 IE的DOM 检查器 <br/>A.5 安装Firefox扩展 <br/>A.6 资源 <br/>附录B 面向对象程序员的JavaScript <br/>B.1 JavaScript不是Java <br/>B.2 JavaScript中的对象 <br/>B.2.1创建一个开箱即用(ad hoc)的对象 <br/>B.2.2 构造函数、类和原型 <br/>B.2.3 扩展内建类 <br/>B.2.4 原型的继承 <br/>B.2.5 JavaScript对象的反射 <br/>B.2.6 接口和“鸭子类型” <br/>B.3 方法和函数 <br/>B.3.1 函数是一等公民 <br/>B.3.2 向对象附加函数 <br/>B.3.3 从其他对象借用函数 <br/>B.3.4 Ajax事件处理和函数上下文 <br/>B.3.5 JavaScript中的闭包 <br/>B.4 小结 <br/>B.5 资源 <br/>附录C Ajax框架和库<br/><br/>


"/>
  • 爱上编程:您身边最放心的编程资源下载站!