1.2 Web的演化过程
当Tim Berners-Lee在1990年首次提出World Wide Web(万维网)时,其概念是相当简单的:使用超文本和URI(统一资源标识符)来创建一个关联信息的网,它能够链接来自世界各个地方的各种学术文献,使人们可以立即访问所引用的素材。的确,第一版本的HTML(超文本标记语言)对于格式化和链接之外的事情关注得很少,它并不适用于构建交互性强的软件,只是一个用来共享最新的各种文字和图表信息的平台。Web就是从这样的静态页面开始发展的。
随着Web的发展,商业界很快就发现了它在向大众发布产品及服务信息等应用上所具有的优势。紧接下来的新一代Web则着眼于提高信息的格式化和显示能力,而HTML也随之发展,以满足这些需求和这些新的媒体意识强烈的用户期望。很快,一家名为Netscape的小公司将推动Web的发展进程迈出更迅速的一步。
1.2.1 JavaScript
Netscape Navigator是第一个成功的主流Web浏览器,同样也使Web技术得以快速发展。但是,Netscape在标准出台之前(就像现在微软在IE的开发中忽视现有标准而遭到批评一样)就开发新技术或对原有技术进行扩展的做法,却经常遭到标准化组织的批评。JavaScript就是这种技术中的一个。
JavaScript原名为LiveScript,是Netscape公司的Brendan Eich开发的,包含于Navigator浏览器2.0版本(发布于1995年)之中。开发人员第一次能够控制页面与用户之间的交互。对于诸如数据验证这样的简单任务,不再需要持续地在服务器和客户端之间往返,只需在浏览器中就可以实现。对于大部分因特网用户都还是通过28.8Kbit/s的调制解调器实现连接的时代而言,这一能力是十分重要的,因为那时向服务器发送每个请求就像是一个等候游戏。使用户等候响应的次数尽可能地小,这是朝着Ajax方法发展的第一个重要步骤。
1.2.2 帧
HTML的最初版本将每个文档都看作是独立的,直到HTML 4.0版,帧(frame)还没有正式引入。帧的理念是使一个网页能够分成几个独立的文档,由于Netscape在HTML 4.0还没有完成时就实现了该功能,因而引发了争议。Netscape Navigator 2.0是第一个同时支持帧和JavaScript的浏览器。这是Ajax演化进程中的一个重要步骤。
20世纪90年代末,当微软和Netscape之间的浏览器之战爆发之后,JavaScript和帧都被纳入了正式的标准之中。随着它们功能的不断增加,富于创新的开发人员开始尝试将它们集成在一起使用。由于帧表示的是一个完全独立的对服务器的请求,JavaScript能够控制帧及其内容的能力,使实现某些令人兴奋的效果成为了可能。
1.2.3 隐藏帧技术
当开发人员掌握操作帧的方法之后,也就为客户端—服务器通信引入了一种有效的工具。隐藏帧技术是指配置一个帧集(frameset),使其中一个帧的宽度或高度为0像素,其唯一的功能就是用来初始化与服务器的通信。隐藏帧可以包含一个HTML表单,表单中包含一些特定的字段,这些字段能够通过JavaScript实现动态填充,并将其发回到服务器端。当返回该帧时,将会调用另一个JavaScript函数,以提示数据已经返回了。隐藏帧技术是Web应用系统中第一个异步请求/响应模型。
然而这只是第一个Ajax通信模型,另一个技术进展已经不远了。
1.2.4 动态HTML和DOM
直到1996年左右,Web的主流还是静态页面。尽管JavaScript和隐藏帧技术能使用户交互更具活力,但除了重载页面之外仍然没有改变页面内容显示的方法。紧接着,IE 4.0发布了。
在此时,IE引入了动态HTML(DHTML)技术,凭借该技术IE成功地赶上了市场的领导者Netscape Navigator,甚至还占了上风。尽管还在开发阶段,但DHTML还是代表了从静态网页向前迈出的重要一步,它使得开发人员能够通过JavaScript来修改已载入页面的任何部分。随着CSS(层叠样式表)的出现,DHTML使Web开发重现活力,尽管早期微软和Netscape所遵循的路线有很大的不同。开发社区感到振奋是可以理解的,因为将DHTML和隐藏帧技术组合在一起,就意味着可以随时根据服务器的信息来更新页面的任何部分,这才是Web开发的一次真正的范型转变(paradigm shift)。
但DHTML却从来没有被纳入标准,尽管微软的影响随着DOM(文档对象模型)成为标准工作的中心变得更加强大。与DHTML只追求修改网页的某个片段不同,DOM有一个更雄心勃勃的目标:为整个网页提供一个标准结构,对该结构的操作将使修改DHTML风格的页面成为可能。这是向Ajax方法发展的下一个重要步骤。
1.2.5 iframe
尽管隐藏帧技术流行得令人难以置信,但它仍然存在一个不足:必须提前计划,为可预见的隐藏帧设置帧集。在1997年,<iframe/>元素作为HTML 4.0官方标准的一部分引入,这是Web进化过程中另一个重要步骤。
开发人员可以在页面的任何地方放置iframe,而不必定义帧集。它可以使开发人员把前面提到的帧集完全抛之脑后,只需简单地在页面中放置隐形的iframe(通过使用CSS),以完成客户端到服务器的通信。当DOM最后在IE 5.0和Netscape 6.0中实现时,还能够动态地在运行时创建iframe,也就是意味着JavaScript函数能够创建iframe,发出请求,获取响应,并且在页面中不需任何额外的HTML元素。这就是新一代的隐藏帧技术:隐藏iframe技术。
1.2.6 XMLHttp
微软的浏览器开发人员肯定了解到隐藏帧技术和新的隐藏iframe技术的广为流行,因为他们决定向开发人员提供一个实现客户端—服务器交互的更好的工具。这个名为XMLHttp的工具是在2001年以ActiveX对象的形式引入的。
微软的JavaScript扩展可以用来创建ActiveX控件这种微软专有的程序对象。当微软通过一个名为MSXML的库来提供XML支持时,就引入了XMLHttp对象。虽然名字中有XML,但是这个对象更像是操作XML数据的另一种方法。实际上,它更像是一个能够在JavaScript中进行控制的特定HTTP请求。开发人员可以像处理其他从服务器端返回的数据一样,访问其HTTP状态代码和首部信息。这些数据可能以XML格式组织,也可能预格式化为HTML、序列化为JavaScript对象或者采用开发人员预想的其他格式。现在可以独立于页面的载入/重载周期,使用纯JavaScript通过程序访问服务器,而不再需要使用隐藏帧或隐藏iframe技术。XMLHttp对象对IE开发人员而言有着巨大的影响。
随着使用者不断增加,开源项目Mozilla的开发人员也开始移植XMLHttp。为了避免使用ActiveX,Mozilla开发者将XMLHttp对象的主要方法和属性都复制到他们自己浏览器的XMLHttpRequest对象中。随着所有主流浏览器都对某种形式的XMLHttp提供支持,Ajax风格的界面开发迅速流行起来,诸如Opera、Safari的边缘浏览器软件也不得不支持某种形式的XMLHttp(均模仿Mozilla,选择在浏览器中实现XMLHttpRequest对象)。







