本书是为各个层次的Web开发人员准备的Ajax教程,它不仅系统地介绍了Ajax及其相关的XML和XMLHttpRequest技术,还阐述了HTML和JavaScript等基本技术,以及XSLT和XPath等较高深的Web技术。本书通过一个个小型的、可以正常工作的、逐步演化的实例,以“润物细无声”的方式使读者理解其基本原理,掌握应用技巧。
第1章 网页的类型 1
1.1 静态网页 2
1.2 动态网页 2
1.2.1 HTML 4
1.2.2 CSS 4
1.2.3 JavaScript 5
1.3 Web浏览器 6
1.3.1 Microsoft Internet Explorer 6
1.3.2 基于Mozilla的浏览器 7
1.3.3 Linux平台下的浏览器 8
1.3.4 其他浏览器 8
1.4 跨浏览器开发简介 9
1.4.1 浏览器大战的牺牲品 9
1.4.2 市场份额不代表一切 10
1.4.3 维和部队——万维网联盟(W3C) 10
1.5 Web服务器端组件 11
1.5.1 Apache 11
1.5.2 Internet信息服务器(IIS) 11
1.5.3 其他Web服务器 12
1.6 在实践中学习 12
1.6.1 手动编码 12
1.6.2 制造工具的工具 13
1.7 小结 14
第2章 Ajax简介 15
2.1 Ajax这不是模型 15
2.2 Ajax名称的由来 16
2.3 Ajax的定义 17
2.3.1 Ajax的价值体系 17
2.3.2 初涉非常规力量 18
2.4 与Ajax的第一类接触 19
2.4.1 看不见的世界 23
2.4.2 引入JavaScript 23
2.5 与Ajax的第二类接触 24
2.5.1 XML 24
2.5.2 XMLHttpRequest对象 27
2.6 与Ajax的第三类接触 29
2.6.1 XSLT 29
2.6.2 主旋律的变奏曲 34
2.7 新事物的形态 35
2.8 小结 35
第3章 HTML/XHTML 37
3.1 HTML与XHTML的差异 37
3.1.1 不规范的格式 38
3.1.2 规范格式 38
3.1.3 规范格式的实例 39
3.2 元素和属性 40
3.2.1 XHTML元素及其属性概述 40
3.2.2 隐藏帧与可见帧 51
3.2.3 运用自己的元素和属性 52
3.2.4 CSS初步 53
3.3 小结 55
第4章 JavaScript 57
4.1 数据类型 58
4.1.1 数值型 58
4.1.2 字符串型 58
4.1.3 布尔型 62
4.1.4 杂项 62
4.1.5 数组 62
4.1.6 对象 63
4.2 变量 63
4.3 运算符 64
4.4 流控制语句 65
4.4.1 条件 66
4.4.2 循环 68
4.5 函数 71
4.6 递归 72
4.7 构造函数 73
4.8 事件句柄 78
4.9 小结 80
第5章 应用HTML和JavaScript实现Ajax 81
5.1 隐藏帧和iframe 82
5.2 跨浏览器的DOM 83
5.2.1 JavaScript、ECMAScript和JScript 89
5.2.2 待解决的问题 95
5.3 表格式信息 98
5.3.1 只读的 102
5.3.2 可修改的 112
5.4 表单 118
5.4.1 只读的 119
5.4.2 可修改的 124
5.5 优点与劣点 133
5.6 小结 134
第6章 XML 135
6.1 元素 137
6.2 属性 138
6.3 禁用字符的处理 139
6.3.1 实体 140
6.3.2 CDATA段 140
6.4 注释 141
6.5 预期处理 141
6.5.1 命名空间 142
6.5.2 DTD 142
6.5.3 模式 143
6.6 XML声明 145
6.7 处理指令 145
6.8 XML数据岛 146
6.8.1 Internet Explorer 146
6.8.2 Firefox 146
6.9 小结 152
第7章 XMLHttpRequest对象 153
7.1 同步 154
7.2 异步 155
7.3 Microsoft Internet Explorer 157
7.4 XML文档对象模型 157
7.5 RSS 166
7.6 Web服务 168
7.6.1 Web服务的定义 168
7.6.2 SOAP 170
7.7 小结 174
第8章 使用XML和XMLHttpRequest的Ajax 175
8.1 传统网站与Ajax网站 175
8.2 XML 178
8.2.1 规范的格式 178
8.2.2 IE中的数据岛 182
8.2.3 对所有人可用的数据岛 184
8.2.4 绑定 187
8.3 XMLHttpRequest对象 193
8.3.1 避免卸载/重载循环 194
8.3.2 浏览器之间的不同 194
8.3.3 了解SOAP 206
8.4 再次遇到的问题 207
8.5 表格化的信息和表单 212
8.5.1 只读的 224
8.5.2 可修改的 227
8.6 优点和缺点 229
8.7 小结 230
第9章 XPath 231
9.1 查找路径 233
9.2 上下文结点 234
9.3 父结点 234
9.4 属性结点 234
9.5 断言 235
9.6 XPath函数 236
9.6.1 逻辑函数 236
9.6.2 数值函数 236
9.6.3 结点集函数 237
9.6.4 字符串函数 237
9.7 XPath表达式 238
9.8 XPath并操作 239
9.9 轴 239
9.9.1 Ancestor轴示例 240
9.9.2 ancestor-or-self轴示例 240
9.9.3 attribute轴示例 241
9.9.4 child轴示例 241
9.9.5 descendant轴示例 241
9.9.6 descendant-or-self轴示例 242
9.9.7 following轴示例 242
9.9.8 following-sibling轴示例 243
9.9.9 namespace轴示例 244
9.9.10 parent轴示例 244
9.9.11 preceding轴示例 244
9.9.12 preceding-sibling轴示例 245
9.9.13 self轴示例 245
9.10 小结 246
第10章 XSLT 247
10.1 递归样式表与迭代样式表 248
10.1.1 范围 253
10.1.2 不变的变量 253
10.2 样式表中的XPath 254
10.3 元素 254
10.3.1 元素定义的位置 257
10.3.2 模板及模板的使用 259
10.3.3 判断结构 264
10.3.4 排序的循环 265
10.4 XSLT函数 267
10.5 XSLT概念 267
10.6 客户端转换 270
10.7 小结 272
第11章 在Ajax中应用XSLT 273
11.1 XSLT 273
11.1.1 神奇的XML 274
11.1.2 微软公司浏览器的不足 274
11.1.3 XPath及相关的知识 275
11.1.4 从Gecko中所学到的 277
11.1.5 再度提到的问题 281
11.2 表格化的信息 282
11.2.1 只读的 282
11.2.2 可修改的 286
11.3 优点和缺点 286
11.4 小结 287
第12章 代码复用 288
12.1 复用=懒惰 289
12.1.1 按代码行计费 289
12.1.2 按页计费 290
12.2 JavaScript对象 290
12.2.1 集合 292
12.2.2 XML 295
12.2.3 XSLT 311
12.2.4 必须序列化的原因 316
12.3 通用的XSLT 317
12.3.1 表单 317
12.3.2 表格 319
12.4 小结 320
第13章 Ruby on Rails之旅 322
13.1 Ruby on Rails简介 322
13.1.1 Ruby 323
13.1.2 Ruby on Rails 323
13.2 安装 324
13.3 Ruby on Rails热身运动 326
13.4 再次遇到的问题 329
13.5 Ajax在哪里 333
13.6 小结 334
第14章 和Ruby一起走得更远 335
14.1 数据类型 336
14.1.1 数值型 336
14.1.2 字符串型 337
14.1.3 布尔型 338
14.1.4 对象 338
14.2 变量 339
14.3 操作符 340
14.4 流控制语句 340
14.4.1 条件分支 341
14.4.2 循环 342
14.5 线程 343
14.6 Ajax 343
14.7 小结 347
第15章 跨浏览器HTML DOM的本质 348
15.1 接口 348
15.2 文档 351
15.3 帧 355
15.4 集合 355
15.5 小结 356
第16章 其他相关内容 357
16.1 Sarissa 357
16.2 JSON和JSON-RPC 361
16.3 ATLAS 362
16.4 万维网联盟 363
16.5 Web浏览器 363
16.6 小结 364
本书意在简明地阐释Ajax应用程序开发的基础知识。
关于本书
近几年,在Web应用程序开发领域潜移转化地经历着一场革命。这场革命是如此平静,以致于直到2005年2月之前,都没有人为这场革命命名,包括革命者本身。确实,除了不断提起那些诸如XMLHttpRequest对象、XML及SOAP之类的奇怪词语,开发者们并没有怎么提到这场革命,可能是害怕因挑战常规而遭受火刑。但是现在这已经不是什么秘密了,没有任何理由不让人们知道Ajax的工作原理。
因为我是一个“在实践中学习”的信奉者(无需Kool Aid ),所以在本书中能够发现更多代码实例本书就是为那些喜欢实验更胜于听人说教的读者所编写的。如果“喜欢”这个词不恰当,也可以用诸如“从……学到更多”之类的词来代替。
直到2005年左右,信奉“在实践中学习”的开发人员都不太相信一张叫做认证证书的纸能够比真实案例中获得的经验更重要。我想在某种程度上,这种想法没有问题。但是不幸的是,当工作机会变得越来越少时,开发人员就开始像马科斯夫人收藏鞋子一样地收藏各种证书。百科全书式的知识对于面试和随后的工作可能有所帮助,但是对于保住工作机会没有太大的作用。现在钟摆开始摆向了另一个方向,其实掌握某个领域知识变得比取得它的证书更重要。这就引出了一个问题“为什么要学习Ajax”。
这个问题的答案可以很简单扼要,也可以像Ajax的概念一样丰富多彩。让我们首先从简单的回答开始,因为它看起来更适合被放在简历上。我们都知道适于放在简历上的东西是我们早已习惯的,就像生活和饮食的风格一样。如果再有一些实际动手的能力,保住工作的机会就大大增加了。
各种丰富多彩的答案多半都源于那些描述Web开发趋势的人们的说法,Ajax是未来的潮流。当然这也会招致别人这样的回应“以前人们也说DHTML是未来的潮流,可是大家不谈论它已经有5年之久了”。的确以前是有人说过DHTML是未来的潮流,但是这次的情况有所不同。
其区别在于该技术是自然发展起来的,而不是因为开发者们纷纷在简历中炫耀而形成的潮流。现在有许多实际应用的例子,其效果已经远远超过了诸如跟随鼠标指针扫地的小精灵之类的小把戏了。应用这些技术的公司是真正具有更长历史的公司,利用这些技术也不再只是因为“它很酷”了。
阅读本书前应该具备的知识
本书假定读者对Web开发技术有基本的了解,而不仅仅是诸如所见即所得、鼠标拖放等当前标准。当然并不是必须能够手动编写HTML代码,只要知道HTML的存在就行了。本书希望能够填补一些空白,因此将涉及一些必不可少的基础知识。
除了我对拖放式的Web开发方法不太喜欢以外,了解HTML还有一个合乎逻辑的理由。那就是当HTML文档被装入浏览器之后,我们还将会修改它。这不是说需要对文档进行大刀阔斧地处理,只是移走元素、放入元素或者适当地修改元素。
即使不熟悉JavaScript也没关系,本书已经努力地来深入地阐述它,无需借助别的书籍理解本书。不过现在想一想,也失去了编写一本配套的JavaScript书籍的机会。
如果不熟悉XML,也不要因Ajax是异步的JavaScript和XML的缩写而感到担忧,因为你所需要了解的知识这里都有。XSLT也一样,它是一种将XML转换为其他格式的语言。想想霍格沃茨魔法学校,就会明白了。
本书描述了Ajax的演化过程(如果你喜欢,也可以说是聪明的设计),从应用动态HTML进行Web开发,直到异步的JavaScript和XML。因为本书描述的是比较先进的Web开发技术,所以应当使用当前最好的浏览器,诸如Firefox或者Flock,还需要一个Internet连接。
本书的结构
下面是本书各章节的概要:
• 第1章“网页的类型”概要地介绍了自Web诞生以来的各种网页编码方法,介绍了从静态网页到动态网页的Web开发发展史。另外还讨论了各种Web开发技术,最后讨论了浏览器之间的竞争。
• 第2章“Ajax简介”介绍了Ajax及演示第一个Ajax应用程序时会发生的一些情况,揭示了Ajax的概念,并逐步深入地介绍从原始的Ajax到现在的整个演变过程。
• 第3章“HTML/XHTML”描述了Ajax中未被提及的基本部分,包括HTML/XHTML和层叠样式表。
• 第4章“JavaScript”是对JavaScript的一个概述,包括数据类型、变量和操作符。还介绍了流程控制语句、递归函数、构造函数和事件处理程序等。
• 第5章“在Ajax中使用HTML和JavaScript”描述了Ajax的前身。本质上,它类似于使用石刀和熊皮之类的方法。尽管这些技术有点过时,但是它能很好地展示Ajax应用程序是如何工作的。另外,本章还介绍了在框架中交换信息的“隐含技术”。此外,为了安抚坚信这些技术已经过时的人们,还介绍了MySQL中存储过程的相关知识。
• 第6章“XML”介绍了XML,特别是Ajax中将应用到的那部分知识。对元素、属性和实体,各种描述内容的方法,文档类型定义,框架等都做了介绍。还包括跨浏览器的XML数据孤岛。
• 第7章“XMLHttpRequest”剖析了XMLHttpRequest对象,描述了它的各种属性和方法。对使用同步方式代替异步方式感兴趣吗?在这一章里可以找到答案。另外,本章还讨论了Web服务和SOAP。
• 第8章“使用XML和XMLHTTPRequest对象的Ajax”介绍了人们所认知的纯Ajax,特别关注了整个工作的核心—XMLHttpRequest对象。另外,还讨论了,从PHP到C#各种终端系统。还介绍了RPC和SOAP这两个更流行的通信协议。
• 第9章“XPath”详细介绍了XPath。本章从XPath(经常被认为是XSLT的仆人)的基础知识开始,阐述了在一个XML文档中查找信息的方法。其中还阐述了XPath轴(aixs)的细节信息,至少是值得一看的。
• 第10章“XSLT”详细讲解了XSLT中令人称奇的主题以及如何将它应用在一个跨浏览器的Ajax应用当中。本章阐述了从基础知识到高级特性方面的内容,试图揭开XSLT神秘的面纱。
• 第11章“在Ajax中应用XSLT”,通过对XSLT的介绍进一步讲解了本书前4章所提到的素材。直到不久以前,应用XSLT还被认为是个坏主意,不过只要在应用时慎重一些,就不会有问题。XSLT是一种可以进一步增加网站访问者体验的工具。
• 第12章“代码复用”介绍了一个在本书中所有实例都将应用的、自已开发的客户端JavaScript程序库。虽然并不一定必须使用这个程序库,但是该例子能够对大部分现存Ajax程序库的技术内幕有较好的了解。
• 第13章“Ruby on Rails之旅”简单介绍了开放源码的Ruby on Rails框架。从获取和安装各种组件开始,本章展示了启动WEBrick Web服务器的方法。在之后的一组例子中,演示了一个访问MySQL数据库的简单网页。
• 第14章“和Ruby一起走得更远”进一步深入研究了Ruby on Rails,并介绍了一个应用Rails内建JavaScript程序库的简单Ajax应用程序。
• 第15章“跨浏览器HTML DOM的本质”描述了跨浏览器的HTML文档对象模型的模糊及神秘的部分。作为Ajax未被提及的组成部分,HTML DOM是访问HTML或者XHTML文档各个部分的重要方法。这也是Ajax“只更新文档的一部分”特性的基础。
• 第16章“其他相关内容”描述了一些在万维网上可用的资源,从可应用于Ajax的预编制的JavaScript程序库到多种可用于个人电脑的浏览器均有涉及。
本书中的约定
本书中的例子、代码片段和文本中的代码都使用代码字体。在所选择的编辑器中按照这种风格输入,结果可能如下所示:
if(enemy = 'troll')
runaway();
无封面