全部博文(2065)
分类: 系统运维
2010-07-08 17:32:33
Msxml2.XMLHTTP整理
时间:
客户端调用XMLHTTP的过程很简单,只有5个步骤:
1、创建XMLHTTP对象
2、打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等。
客户端通过Open命令打开与服务端的服务网页的连接。与普通HTTP指令传送一样,可以用"GET"方法或"POST"方法指向服务端的服务网页。
3、发送指令。
4、等待并接收服务端返回的处理结果。
5、释放XMLHTTP对象
定义XMLHTTP对象:
Set objXML = CreateObject(Msxml2.XMLHTTP) 或
Set objXML = CreateObject(“Microsoft.XMLHTTP”) (vbs)
var xml = new ActiveXObject("Microsoft.XMLHTTP"(javascript)
' Or, for version 3.0 of XMLHTTP, use:
Set xml = Server.CreateObject(MSXML2.ServerXMLHTTP)
说明:一般我们在JS里面可以这样定义
var xml = new
ActiveXObject("Microsoft.XMLHTTP"(javascript)这就是我们经常看到的AJAX创建httpxml对象的方式。如果在ASP里面的话我们可以使用ASP的方式处理:
set xmlhttp =
server.createobject("Msxml2.XMLHTTP")
这个对象的相关方法列举如下:
XMLHTTP方法:
open(bstrMethod, bstrUrl, varAsync, bstrUser,
bstrPassword)
bstrMethod: 数据传送方式,即GET或POST。用"POST"方式发送数据,可以大到4MB,也可以换为"GET",只能256KB。(注意了GET的传输方式有大小限制的!POST只能是4MB吗?AJAX上传的话最大限制是多少?)
bstrUrl: 服务网页的URL。 (提交的URL值)
varAsync: async: 一个布尔标识,说明请求是否为异步的。如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作
bstrUser: 用户名,可省略。
bstrPassword:用户口令,可省略。
send(varBody)(如果是POST就提交POST的表单内容了)
varBody:指令集。可以是XML格式数据,也可以是字符串,流,或者一个无符号整数数组。也可以省略,让指令通过Open方法的URL参数代入。 发送数据的方式分为同步和异步两种。在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器 返回确认消息后才结束Send进程。
PS:能够发送XML格式的数据包的!
setRequestHeader(bstrHeader, bstrValue)
bstrHeader:HTTP 头(header)
bstrValue:HTTP 头(header)的值
示例:
xmlhttp.setrequestheader "content-type",
"application/x-www-form-urlencoded"
xmlhttp.setrequestheader "host",host
xmlhttp.setrequestheader
"content-length",len(soaprequest)
可以实现这种设置HTTP请求头的方式的
如果Open方法定义为POST,可以定义表单方式上传:
xmlhttp.setRequestHeader "Content-Type",
"application/x-www-form-urlencoded"
PS:这种方式即为类似于表单上传的方式了
abort
取消当前 HTTP 请求
getAllResponseHeaders
从响应信息中检索所有的标头字段(解析HTTP返回头部信息)
getResponseHeader
从响应信息正文中获得一个 HTTP 标头值
三、XMLHTTP属性:
onreadystatechange
指定当readyState属性改变时的事件处理句柄
语法
oXMLHttpRequest.onreadystatechange = funcMyHandler;
Example
如下的例子演示当XMLHTTPRequest对象的readyState属性改变时调用HandleStateChange函数,当数据接收完毕后(readystate == 4)此页面上的一个按钮将被激活
var xmlhttp=null;
function PostOrder(xmldoc)
{
var xmlhttp = new ActiveXObject("Msxml2.XMLHTT
xmlhttp.Open("POST",
"", false);
xmlhttp.onreadystatechange= HandleStateChange;//当状态发生变化的时候处理
xmlhttp.Send(xmldoc);
myButton.disabled = true;
}
function HandleStateChange()
{
if (xmlhttp.readyState == 4)
{
myButton.disabled = false;
alert("Result = " +
xmlhttp.responseXML.xml);
}
}
备注
此属性只写,为W
readyState
XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示:
值 说明
0 Response对象已经创建,但XML文档下载过程尚未结束
1 XML文档已经装载完毕
2 XML文档已经装载完毕,正在处理中
3 部分XML文档已经解析
4 文档已经解析完毕,客户端可以接受返回消息
responseBody
Variant型 结果返回为无符号整数数组
responseStream
Variant型 结果返回为IStream流
responseText
将响应信息作为字符串返回
语法
strValue = oXMLHttpRequest.responseText;
Example
var xmlhttp = new ActiveXObject("Msxml2.XMLHTT
xmlhttp.open("GET", "", false);
xmlhttp.send();
alert(xmlhttp.responseText);
备注
变量,此属性只读,将响应信息作为字符串返回。
XMLHTTP尝试将响应信息解码为Unicode字符串,XMLHTTP默认将响应数据的编码定为UTF-8,如果服务器返回的数据带 BOM(byte-order mark),XMLHTTP可以解码任何UCS-2 (big or little endian)或者UCS-4 数据。注意,如果服务器返回的是xml文档,此属性并不处理xml文档中的编码声明。你需要使用responseXML来处理
responseXML
object型 结果返回为XML格式数据。
status
Long型 服务器返回的HTTP状态码
statusText
String型 服务器HTTP响应行状态
举例:
1、 添加缓存控制
xmlhttp.setrequestheader "Cache-control","public"