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步:

  1. 创建 XMLHTTP 对象。
  2. 指定方法,URL,以及验证,用open()方法对服务器打开XMLHTTP。打开方法可以是POSTGET
  3. 使用send()方法,向服务器发送request 信息。
  4. 等待,直到从服务器接受到结果。
  5. 释放 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获取完整的回应数据

posted on 2009-11-24 23:04  EricLi  阅读(286)  评论(0编辑  收藏  举报