Welcome

首页 / 脚本样式 / Ajax / Ajax实战:向服务器发送请求

Ajax实战:向服务器发送请求2011-09-06希赛网通过XMLHttpRequest对象向服务器发送请求是一件相当直接的事情。我们需 要做的所有事情就是给它传递一个服务器页面的URL,这个页面将生成数据。就 像下面这样:

XMLHttpRequest支持大量的HTTP调用语义,包括用来动态生成页面的可选查 询字符串参数(你可能已经知道这些CGI参数、Form参数或者ServletRequest参数 ,取决于服务器端开发背景)。在考察请求对象如何支持这些功能之前,我们先 来快速回顾一下HTTP的基础知识。

HTTP快速入门

HTTP对于因特网而言可谓是无处不在,以至于我们通常都对它熟视无睹。在 编写传统的Web应用时,我们近距离接触HTTP协议的地方通常是定义一个超链接 或者为一个表单设置method属性。而对于Ajax而言,我们可以深入那些协议的底 层细节,这使得我们可以做一些惊人的事情。

浏览器和Web服务器之间的HTTP事务包括浏览器发起的一个请求和随后服务器 返回的一个响应(其中也包括执行Web开发人员编写的聪明绝顶、激动人心的代码 ,这一点毫无疑问)。请求和响应本质上来讲都是文本流,客户端和服务器将它 们解释为首部信息和紧随其后的主体部分。你可以将首部信息想像为写在信封上 的地址栏,而主体部分是信封中的信件。首部信息简单地指示接收方应该如何处 理信件的内容。

一个HTTP请求主要由首部信息和可能包含一些数据或参数的主体部分组成。 响应则通常包含返回页面的HTML标记。Mozilla浏览器包含了一个很有用的工具 ,叫做LiveHTTPHeaders(见本章“资源”一节以及附录A)。我们来查 看一下在浏览器工作时,那些请求和响应的首部信息的内容。打开Google的首页 ,看看在底层发生了些什么事情。

我们发送的第一个请求包含有这样的首部信息:

GET / HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0
(Windows; U; Windows NT 5.0; en-US; rv:1.7)
Gecko/20040803 Firefox/0.9.3
Accept: text/xml,application/xml,
application/xhtml+xml,text/html;q=0.9,
text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Cookie: PREF=ID=cabd38877dc0b6a1:TM=1116601572
:LM=1116601572:S=GD3SsQk3v0adtSBP

第一行告诉我们使用的是哪个HTTP方法。大部分Web开发者都很熟悉GET,这 是用来获取文档的;还有POST,这是用来提交HTML表单的。万维网联盟(W3C)的规 约还包括了一些其他的通用方法,包括HEAD,用来获取一个文件的首部信息;PUT ,用于向服务器上传文档;DELETE,用来删除服务器上的文档。后续的首部信息 是用来进行沟通的,客户端告诉服务器它所能支持的内容类型、字符集等等。因 为我之前曾经访问过Google,它还发送了一个cookie,这段简短的消息告诉 Google我是谁。