互联网是以一系列包含文本和图像、音频以及视频文件链接的静态页面组成。如今,尽管大多数页面都加入了通过服务器端脚本生成的文本和多媒体信息,但在很大程度上互联网还是处于这样的状况。这些通过服务器端脚本生成的文本和多媒体信息也就是本书所介绍的应用所创建的。但是,Web 2.0的出现可以引领开发人员探索与Web服务器和数据库进行用户交互的新方法,而正是这些Web服务器和数据库保存了我们所需要的信息。使用Ajax(异步JavaScript和XML)编程进行交互是如今日益流行的方法,它在减少读取静态元素时间的同时改进了交互性。
注意 要更好理解Web 2.0的概念,请参阅Tim O/'Reilly的文章:http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html。
本章将介绍Ajax编程的基础以及可以集成到Web应用的Ajax示例元素。本章并不会全面介绍Ajax编程,只是为在未来工作中使用该技术提供一个基础。本章将包括如下:
■整合脚本和置标语言创建Ajax应用。
■一个Ajax应用的基本组成部分,包括发送请求以及解析来自服务器端的响应。
■如何修改前面章节介绍应用的元素来创建支持Ajax的页面。
■代码库以及如何需求帮助信息。
34.1 Ajax是什么
Ajax本身不是一个编程语言,也不是一个单一的技术。通常,Ajax编程是将处理XML格式数据传输的客户端JAVASCRIPT编程与某种服务器端编程语言(例如,PHP)的结合。此外,XHTML和CSS也被用来展示支持Ajax的元素。
典型的,Ajax编程的结果是为一个交互式应用提供更加清晰和快捷的用户接口————例如,连接到FACEBOOK,FLICKER以及其他处于Web 2.0前沿的社交网站的接口。这些应用支持用户不需要重新刷新或载入整个页面来执行许多任务,这也正是Ajax的用武之地。客户端的编程将调用许多服务器端的编程,但是只有用户浏览器所显示的特定区域才是会被从新刷新的。这种动作结果模拟了在单个应用才会产生的动作结果,但却是在Web环境下发生的。
一个常见的例子是,处理工作单的脱机应用和查看网站上信息丰富的表格。在脱机应用中,用户可以修改一个单元格并将公式应用到其他单元格,或者点击一个列进行排序,所有这些操作不需要离开最初的界面。在一个静态的Web环境中,点击一个链接对一列进行排序可能需要给服务器发送一个新请求,服务器返回一个新结果给浏览器,浏览器重新刷新该页面并展示给用户。在支持Ajax的Web环境中,表格可以根据用户的请求进行排序,不需要重新载入整个页面。
接下来的内容将介绍使用Ajax时需要涉及的不同技术。这些信息也不是全面的,文中将给出一些相关的资源。
34.1.1 HTTP请求和响应
超文本传输协议,或者HTTP,是一个Internet标准,它定义了Web服务器和Web浏览器之间相互交流的方式。当用户在Web浏览器的地址栏输入一个URL请求Web页面,或者点击一个链接,提交一个表单,或者执行任何能将用户带到新页面的时候,浏览器将发送一个HTTP请求。
这个请求将发送给Web服务器,服务器将返回许多可能响应的一种。要获得来自Web服务器的可理解响应,必须正确地创建请求。当使用Ajax的时候,了解请求和相应的格式是非常关键的,因为开发人员必须在Ajax应用中编写正确的请求以及期望特定的返回结果。
当发送HTTP请求时,客户端将用以下格式发送信息。
■开始行,包含了发送方法,资源路径以及使用的HTTP版本,如下示例:
GET http://server/phpmysql4e/chapter34/test.html HTTP/1.1
其他常见的方法包括POST和HEAD。
■可选的报头行,以“参数:值”格式出现,如下示例:
User-agent:Mozilla/5.0(Windows;U;Windows NT 6.0;en-US;rv:1.9.0.1)
Gecko/2008070208 Firefox/3.0.1
以及/或者:
Accept:text/plain,text/html
关于HTTP报头,请参阅:http://www.w3.org/Protocols/rfc2616/。
■空白行
■可选的消息正文(Message Body)
发送HTTP请求后,客户端将接收到一个HTTP响应。
HTTP响应的格式如下所示:
■开始行,或者状态行,包含了所使用的HTTP版本以及响应码,如下示例:
HTTP/1.1 200 OK
状态码的第一个数字(这里是200中的2)给出响应的类型。以1为开始的状态码表示响应为信息性的,2表示请求成功,3表示请求被重定向,4表示客户端错误,例如404表示客户端请求缺少相关内容项,5表示服务器端错误,例如,500表示非正常的脚本。
关于HTTP状态码的完整列表,请参阅:http://www.w3.org/Protocols/rfc2616/。
■可选的报头行,以“参数:值”格式出现,如下示例:
Server:Apache/2.2.9
Last-Modified:Fri,1 Aug 2008 15:34:59 GMT