Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29334679
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: 系统运维

2010-07-08 17:32:33

Msxml2.XMLHTTP整理

时间:2010-7-8

客户端调用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
: 数据传送方式,即GETPOST。用"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.XMLHTTP.5.0");
  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);
  }
}
备注
此属性只写,为W3C文档对象模型的扩展.


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.XMLHTTP.3.0");
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"  

 

阅读(1577) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~