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获取完整的回应数据 |
浙公网安备 33010602011771号