封面介绍
Adding Ajax封面上的动物是一只带有叉状斑纹的鼠狐猴,通常叫做叉斑鼠狐猴(学名:Phaner furcifer)。几乎和所有狐猴一样,只有在马达加斯加(Madagascar)岛上,才能够找到叉斑鼠狐猴的踪影。叉斑鼠狐猴生活在这个国家的北部和西部的热带雨林中。叉斑鼠狐猴大约有18到22英寸长,但是它的尾巴就占去了整个长度的一半。这种狐猴名字的由来是:从每只眼睛到它的头顶各有一条条纹,最后汇成一个叉状。这种特殊的灵长目动物以温带落叶树木的树脂为食,但有时也吃昆虫幼虫分泌的蜜汁以及昆虫。叉斑鼠狐猴是最善于鸣叫的狐猴,已被证实的叫声就超过7种,包括ki、kiu、kea(只有雄性才会发出)、hon、以及报警、悲痛和争斗的叫声。
和世界上的大多数动物一样,叉斑鼠狐猴的领地正在受着耕地和农场扩张的威胁。它也正在濒临灭绝。然而,人们正在努力保护这种狐猴;在一些公园以及这个国家周围的自然保护区都可以发现它们。
本书的封面图片来自Lydekker国家历史图书馆。
第1章 准备迁移到Ajax1
Ajax是这样的技术3
开始清理7
将表格转换为CSS布局11
继续转换:逐个元素进行转换16
处理浏览器特有的怪癖17
了解你的客户端基础20
为你的网站设计一个框架24
渐进增强和彻底翻新26
第2章 Ajax基础29
Web应用程序29
准备要使用的对象37
准备和发送请求39
处理Ajax响应45
端点、JavaScript沙箱和控件62
安全问题67
性能初探68
最后提一下异步和同步69
第3章 Ajax工具及术语71
Prototype72
script.aculo.us80
Rico83
Dojo85
其他库92
第4章 交互效果97
Ajax友好的事件处理98
即时信息106
页内预览118
为成功或失败添加颜色渐变效果123
第5章 空间:最后的边界133
水平方向上控制空间:折叠134
标签页160
覆盖173
第6章 动态处理数据180
就地编辑181
就地编辑:性能、安全性及可访问性192
高亮显示变更196
再谈页内更新的可访问性208
实时验证211
性能和两阶段提交214
外部库的数据效果217
第7章 单页面应用程序中的历史、导航和位置222
介绍新挑战:内容分页223
记住位置244
新旧持久保持技术共存252
新的页面视图261
事后分析264
第8章 添加高级视觉效果265
高级CSS技巧266
可缩放矢量图形277
SVG快速浏览282
SVG和Ajax的混合287
图形的未来294
第9章 Mashup你的网站296
利用Google绘制地图297
第二个服务:Flickr303
在我们的Mashup中加入Technorati317
重构这个Mashup326
重构客户端336
Mashup总结347
第10章 可扩展性、基础结构,以及从头开始349
框架:紧耦合和松耦合350
Web服务:资源和安全352
Ajax库:自给自足,还是“拿来主义”353
从头开始设计Ajax354
现有的框架360
继续我们的Ajax365
索引367
译序
每每遇到一本好书,都很想和人分享,把它介绍给同事、朋友、甚至是自己的学生,遇到英文书籍时,更是想把它翻译出来,献给和我一样喜欢这本书的读者,但是总是由于时间和精力上的原因,都仅仅是翻译了书中的个别章节,或者是只做了一个读书笔记。尽管如此,与人分享的感觉是快乐的,于是就有了自己的博客(寒雪谷:http://hi.baidu.com/snowyvalley)上的一个栏目:快乐译站。
然而,现在,当我翻出快乐译站上的很多文章时,才发现仅是结果是快乐的,其中经历的过程并不快乐,甚至是痛苦的。其间要经历很多困扰,在选择技术术语时,让你感觉到仲伯难分,审词酌句时,更令你辗转反侧,美语俚语常常是横竖不通,走投无路,各种词汇间的细微差异足以让你左右为难,心情急躁。在你的体力还没有消之殆尽的时候,你会感觉到脑力已经不足了。就这样,每当遇到山穷水尽的时候,真的想从里面浮上来,透口气,甚至是中途放弃。在翻译这本书的中途就经历了这样的痛苦,自己静下心来,去反思,这本书真的值得花费这样的时间和精力去和大家分享吗?
为了给自己减压,同时更是为了这个疑问,我走进了书店,翻开了琳琅满目的ajax书籍,这些书籍真的是各具特色,有的对模式的分析非常精妙,有的对效果的讲解细致入微,有的确实达到了模式和效果的完美结合,真的让人难分取舍。但是问题是,如果我是一个web开发者,同时,又是一个Ajax初学者,迫于工作需要,想在我的项目中使用Ajax,那么我该需要怎样的一本Ajax书呢?就这个问题我在书架前陷入了思考。
我不想改变我现有的项目,把它推倒重来,我没有时间,也没有精力,项目主管也不会容许我做这样的技术豪赌。我只能是让Ajax作为一个备选方案,让它使我的项目变得更好,而不是为了追求时尚而推翻曾经的积累和努力。我想让我的项目有所“革新”,而不是彻底“革命”,让它寿归正寝。
我不想重蹈覆辙,我想站在别人现在的起点上,继续向前走。我要在各种流行的Ajax库中,寻找最适合我的一个,甚至是综合应用这些库,不仅要扬它们各自的长处,避它们各自的短处,还要让它们彼此和睦相处。
我想在我的传统web中,寻找哪些地方可以进行改进,使它更具交互性和响应性,比如,不必离开当前页面,甚至不必重载页面就可以编辑表单,删除数据,而这一切完成后,又要适当地通知用户,已经为他们出色地完成了任务。仅仅提供文本信息是枯燥的,而且一切统计数据能否不必花费太多的成本,就可以使用图形的方式,形象地反映出来。
我的web页面空间总是觉得不够用,总是不得不强迫用户去拉动滚动条,我能否在有限的空间内放入更多的内容。
web上每时每刻都有新的服务出现,每时每刻都会有创意出现,比如:Google地图、Flickr照片服务、Technorati博客搜索等等,我们能否结合这些服务或者这些数据,也发挥一次自己的创意,也来一个mashup,制作一杯自己的“鸡尾酒”,对它们再利用,再加工,创造更大的价值,为我的web带来亮点。
我不要知识点的简单证明,或者是技术的一味堆砌,我想要一个真正意义上的“实”例,它更加贴近现实,更加真实,而且只要稍做修改就可以应用于现实。
好了,这就是我想要的一本书,它也可能是你想要的一本书,我已经找到了它,它正静静地躺在我的书架上,只不过我曾对它充满怀疑,只不过它是满目英文,我应该离开书店,继续译完它,把它拿出来与您分享。而此刻的您,也找到了这本书,您正把它握在手里,您正在把它和其它书籍进行比较,正在举棋不定,就和我当初站在书店里徘徊时的感觉一样,只要您清楚,您需要的是怎样的一本书,相信您自己的需要,相信您自己的判断力。如果它已经满足了您的需要,您也应该像我一样离开书店,只不过是带着这本书离开书店。
正如本书的作者所说,这本书会是一本非常好的书,因为他得到了所有的支持,我同样会说:这本书会是一本非常好的译本,因为我最终坚定了分享的信念。
在这里要感谢我的家人,容忍我花去业余时间,坐在电脑前,尤其是我的小女儿,每天陪我一直到深夜。还要感谢我的同学和同事,得到了他们的支持和鼓励,最后,还要感谢编辑,感谢他们的耐心和细心。
当然,作为译者,非常渴望在您和作者之间架起一道桥梁,能够让您和作者进行心与心的沟通,把作者的思想直接传递给您,而感觉不到译者的存在。但是由于个人能力所限,还不能达到这种境界,而且纰漏之处,也在所难免,非常真心地希望得到您的批评和指正。
李秀忠
2007-12-14于深圳
Email:xiuzhong.li@gmail.com
Ajax:可以说是几分变革,几分演变,而又有几分完全是炒作。Ajax是一个笼统的术语,它常用于涵盖如下一套技术:
标记,例如HTML、XHTML、XML和SVG
JavaScript
CSS和XSLT
最后,但也非常重要的是浏览器对象,包括canvas对象和真正执行Ajax的XMLHttpRequest对象。
我们暂且不提人们最近的关注程度,就这些技术而言,其中的大部分都已经应用近十年之久了。那么为什么人们现在还仍旧如此热衷呢?
Ajax不仅仅是一套技术-它还决定了web页面和web应用程序的新的发展方向。我们过去也曾有过这样的决定,但是我们却苦于没有这样的工具,来建立这样的应用程序。现在,这些规范经历了十年的考验,也已经日趋成熟,而且更重要的是,它们受到了web浏览器的广泛支持。新的规范继续涌现,而且这些工具的制造者也比以前更加亲密协作。
几年前,当web开发者最初尝试向web页面加入交互特性时,我们受着浏览器的制约,因为它们支持完全不同的模型,而且有时,甚至受制于不同的脚本语言。就连层叠样式表(Cascading Style Sheets ,CSS),这种作为一种统一的方式向页面添加表现层的技术,在应用时,都因解释的差异而受到困扰,更不必说一些专用的扩展了。
现在,CSS几乎受到了普遍的支持,尽管在一些系统中,还存在着一些“怪癖(quirks)”,其中大部分规范也已经受到了大多数浏览器的支持,而且现在,我们正处在这样的一个平台上,以前不能胜任的事情,现在却可以做的很好。至于脚本,经过ECMA标准组织的努力,我们已经有了一个JavaScript的发布版本,即ECMAScript,而且在Web的上上下下,它都受到了所有主流工具的认可和支持。
标记也变得更加复杂了,而且我们正在从结构松散、变化无常的HTML,向结构严谨、中规中矩的XHTML进行过渡。我们还加入了一些新的XML词汇,例如:可缩放矢量图形(Scalable Vector Graphics,SVG)-一种不必依赖插件和扩展对象,就可以加入交互图形的方式。它是和Canvas对象一起被引入的,它们都独立于任何标记,而且都将被包含在未来的HTML5中, HTML5则是旧的HTML向新的、结构严谨的XHTML过渡的一个中间产物。
然而,我们还没有完全放弃旧的私有对象。现在,与其在一个浏览器上实现它,还不如让它变得更加通用。XMLHttpRequest就是这样的一个对象,它允许我们直接从页面调用web服务,然后,动态地处理结果,而不必重载这个页面。
那么,这对开发者和用户意味着什么呢?它意味着你可以阅读一篇文章,点击它,然后就地编辑它-所有这一切都在同一个页面内完成。我们还可以从表中删除一些行,而且这种删除会立即生效。当然更新也会如此。
我们不必重载页面,或者照片就可以为照片添加分类。或者只通过点击缩略图,就可以放大显示那张照片。
我们对web表单的应用也发生了显著的变化。我们可以在一个列表中做出选择,而这些选项将被自动地添加到另外一个选择列表中。我们还可以使用拖拽的方式对表格内容进行排序,以及折叠一些域来腾出一些空间,或者点击标签页来填充一个大型表单的其他部分,或者来查看其他信息,而且这一切,我们还是不必重载这个页面。
当然,被我们当作“页面”的东西已经发生了变化,而且这种新的视角既有优点也有缺点。当有一百多个页面被加载时,不通过以前的刷新技术,单凭借“页面视图”,我们很难计算出应该为广告付多少费用。搜索引擎公司以及屏幕阅读器1(screen readers)都不能准确地理解动态生成的链接。因为在这种情况下,脚本已经被禁用或者不存在了,当进入依赖脚本的Ajax中时,我们已经没有办法完成任何事情了。
在这里,我们要提及渐进增强(progressive enhancement)的概念。由Steven Champeon根据哲学理论所提出的渐进增强概念认为:我们应该向现有的web技术,加入Ajax效果来增强它,而不是完全取代它。换句话说,你仍然可以建立比较传统的web应用程序,基于表单提交来更新一张表,然后,你可以增强它的功能,即:不必实际提交表单,就可以使用改变的表单域,来更新这张表。
在页面中,如果脚本被禁用,标签页会变成一系列纵向的节。数据没有变化,只是组织形式不同。这时,无论你是通过在PHP中所建立的应用程序,还是通过驻留在Unix box中的应用程序来,请求这些内容,亦或者是在Firefox、Safari以及IE浏览器中,通过JavaScript调用这些内容,这些内容最终将以幻灯播放(slideshow)的方式提供。
利用渐进增强的概念,脚本是否禁用也无关紧要,因为我们并没有丢失功能,仅仅是有些差异罢了。与此同时,Ajax会提高web应用程序的效率,而且在访问这些程序的人当中,大约有80%的人会使用合适的浏览器,而且脚本也是可用的。那么对于你来说最好的消息是:你已经离成功不远了。
无封面