HttpRequest对象是最近两年炒得很“热”的AJAX的基础。使用XMLHTTP组件,开发人员可以不用从当前的Web页面导航而直接传输数据到服务器上或者从服务器取数据。这个功能是重要的,因为它帮助减少了无状态连接的痛苦。它还可以排除下载冗余HTML的需要,从而提高进程的速度。
一、什么是HttpRequest对象
- 背景
HttpRequest对象是最近两年炒得很“热”的AJAX的基础。使用XMLHTTP组件,开发人员可以不用从当前的Web页面导航而直接传输数据到服务器上或者从服务器取数据。这个功能是重要的,因为它帮助减少了无状态连接的痛苦。它还可以排除下载冗余HTML的需要,从而提高进程的速度。
Mozilla做出的回应是创建它自己的继承XML代理类:XMLHttpRequest类。对于大多数情况,XMLHttpRequest对象的行为很像XMLHTTP组件。这就意味着你可以使用很多与XMLHTTP组件相同的帮助信息。方法和属性类似,然而,所有的方法和属性都是以小写字母开头,并且还有一些属性不支持。
HttpRequest对象能够直接在客户端VBScript或JavaScript程序代码发送HTTP请求,可以在客户端的网页直接执行基于WEB的应用程序,并且在客户端和服务器端应用程序使用HTTP发送数据。
HttpRequest对象的版本是从2.0开始的,各版本的ProgID字符串不一样,目前是6.0。
- 建立HttpRequest的代码是:
// 对于IE浏览器 var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP"); //对于非IE浏览器 var xmlHttp = new XMLHttpRequest();
- HttpRequest对象有以下属性:
属性 | 说明 |
---|---|
readyState | 只读属性,目前状态的长整数,值4表示请求处理完成 |
responseBody | 只读属性,获取服务器的响应,返回非符号的字节数组 |
responseSteam | 返回数据流对象 |
responseText | 只读属性,获取服务器的响应,返回字符串 |
responseXML | 只读属性,获取服务器的响应,返回XML DOM对象 |
status | 只读属性,获取HTTP状态码,例如200、302等 |
statusText | 获取HTTP状态信息字符串,例如OK |
onreadystatechange | 读写属性,执行readyState属性改变的事件处理,设定处理程序 |
- HttpRequest对象有以下方法:
方法 | 说明 |
---|---|
abort() | 取消当前的HTTP请求 |
getAllResponseHeaders() | 获取全部HTTP标头的内容 |
getResponseHeader(HeaderName) | 获取全部HTTP标头名称的内容 |
send() | 发送HTTP请求到服务器 |
setRequestHeader(HeaderName,value) | 用户自定义的HTTP标头数据 |
二、HttpRequest对象获取和发送XML
XMLHTTP 用于通过 HTTP 请求来发送或接受 XML 信息。实际上 XMLHTTP 还有其他的很多用途。可以用它来向服务器发送命令(可用 XML, string, stream, 或 unsigned array)。命令也可以作为 URL 的参数还可以向客户端发送结果信息( XML, string, stream, 或 unsigned array)
在客户端使用XMLHTTP很简单,只有5步:
- 创建 XMLHTTP 对象。
- 指定方法,URL,以及验证,用open()方法对服务器打开XMLHTTP。打开方法可以是POST或GET。
- 使用send()方法,向服务器发送request 信息。
- 等待,直到从服务器接受到结果。
- 释放 XMLHTTP 对象。
三、读取和设定Http前缀内容
HttpRequest对象能够新增用户自定义的HTTP标头名称和内容,使用的是setRequestHeader方法。响应程序代码如下:
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%> <% //不存储在客户端缓冲 Response.Expires = 0; //返回用户自定义的标头数据; Response.Write(Request.ServerVariables("HTTP_nickname")); %>
点击查看实例效果。
四、readyState属性
如果主从架构的应用程序需要异步方式提出HTTP请求,onreadystatechange属性能够设定服务器响应后的处理程序,而不影响客户端程序的运行。
下面的例子演示当XMLHTTPRequest对象的readyState属性改变时调用HandleStateChange函数,当数据接收完毕后(readystate == 4),此页面上的将显示欢迎信息。响应程序代码如下:
<%@ Page Language="C#" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Xml" %> <script runat="server"> private void Page_Load(object sender, System.EventArgs e) { Stream inStream=Request.InputStream; if (inStream.Length > 0) { XmlReader reader = XmlReader.Create(Request.InputStream); reader.ReadToFollowing("student"); string name = reader.GetAttribute("name"); reader.Close(); Response.Write("你好,"+name); } } </script>
点击查看实例效果。
五、onreadystatechange属性
值 | 说明 |
---|---|
0(未初始化) | 对象已建立,但是尚未初始化(尚未调用open方法) |
1 (初始化) | 对象已建立,尚未调用send方法 |
2 (发送数据) | send方法已调用,但是当前的状态及http头未知 |
3 (数据传送中) | 已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误 |
4 (完成)(HeaderName,value) | 数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据 |