XMLHttpRequest 对象

XMLHttpRequest 对象

提供客户端同http服务器通讯的协议
1.下面的代码是在JScript中创建一个XMLHTTP对象并从服务器请求一个XML文档。服务器返回XML文档并显示。
var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.3.0");
xmlHttpReq.open("GET", "http://localhost/books.xml", false);
xmlHttpReq.send();
alert(xmlHttpReq.responseText);

在非IE的浏览器中,需要用new XMLHttpRequest()来创建对象,如下:
var xmlHttpReq = new XMLHttpRequest();
xmlHttpReq.open("GET", "http://localhost/books.xml", false);
xmlHttpReq.send();
alert(xmlHttpReq.responseText);

备注
客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML文档对象模型Microsoft? XML Document Object Model (DOM)处理回应。


XMLHttpRequest成员

onreadystatechange*    指定当readyState属性改变时的事件处理句柄。只写
readyState        返回当前请求的状态,只读.
responseBody        将回应信息正文以unsigned byte数组形式返回.只读
responseStream        以Ado Stream对象的形式返回响应信息。只读
responseText        将响应信息作为字符串返回.只读
responseXML        将响应信息格式化为Xml Document对象并返回,只读
status            返回当前请求的http状态码.只读
statusText        返回当前请求的响应行状态,只读


XMLHttpRequest方法

abort            取消当前请求
getAllResponseHeaders    获取响应的所有http头
getResponseHeader    从响应信息中获取指定的http头
open            创建一个新的http请求,并指定此请求的方法、URL以及验证信息(用户名/密码)
send            发送请求到http服务器并接收回应
setRequestHeader    单独指定请求的某个http头




onreadystatechange 指定当readyState属性改变时的事件处理句柄

语法:oXMLHttpRequest.onreadystatechange = funcMyHandler;
如下的例子演示当XMLHTTPRequest对象的readyState属性改变时调用HandleStateChange函数,当数据接收完毕后(readystate == 4)此页面上的一个按钮将被激活
var xmlhttp=null;
function PostOrder(xmldoc)
{
  var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.5.0");
  xmlhttp.Open("POST", "http://myserver/orders/processorder.asp", false);
  xmlhttp.onreadystatechange= HandleStateChange;
  xmlhttp.Send(xmldoc);
  myButton.disabled = true;
}
function HandleStateChange()
{
  if (xmlhttp.readyState == 4)
  {
    myButton.disabled = false;
    alert("Result = " + xmlhttp.responseXML.xml);
  }
}




readyState 返回XMLHTTP请求的当前状态

语法:lValue = oXMLHttpRequest.readyState;

var XmlHttp;
XmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
function send() {
   XmlHttp.onreadystatechange = doHttpReadyStateChange;
   XmlHttp.open("GET", "http://localhost/sample.xml", true);
   XmlHttp.send();
}
function doHttpReadyStateChange() {
   if (XmlHttp.readyState == 4) {
      alert("Done");
   }
}

备注:
变量,此属性只读,状态用长度为4的整型表示.定义如下:

0 (未初始化)    对象已建立,但是尚未初始化(尚未调用open方法)
1 (初始化)    对象已建立,尚未调用send方法
2 (发送数据)    send方法已调用,但是当前的状态及http头未知
3 (数据传送中)    已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
4 (完成)    数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据




responseBody  返回某一格式的服务器响应数据
语法: strValue = oXMLHttpRequest.responseBody;

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/books.xml", false);
xmlhttp.send();
alert(xmlhttp.responseBody);




responseStream 以Ado Stream对象的形式返回响应信息
语法: strValue = oXMLHttpRequest.responseStream;

备注:
变量,此属性只读,以Ado Stream对象的形式返回响应信息。




responseText 将响应信息作为字符串返回
语法: strValue = oXMLHttpRequest.responseText;

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/books.xml", 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 将响应信息格式化为Xml Document对象并返回
语法: var objDispatch = oXMLHttpRequest.responseXML;

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/books.xml", false);
xmlhttp.send();
alert(xmlhttp.responseXML.xml);

备注:
变量,此属性只读,将响应信息格式化为Xml Document对象并返回。如果响应数据不是有效的XML文档,此属性本身不返回XMLDOMParseError,可以通过处理过的DOMDocument对象获取错误信息。




status 返回当前请求的http状态码
语法: lValue = oXMLHttpRequest.status;

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/books.xml", false);
xmlhttp.send();
alert(xmlhttp.status);




statusText 返回当前请求的响应行状态
语法:strValue = oXMLHttpRequest.statusText;

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/books.xml", false);
xmlhttp.send();
alert(xmlhttp.statusText);

备注:
字符串,此属性只读,以BSTR返回当前请求的响应行状态,此属性仅当数据发送并接收完毕后才可获取。




getAllResponseHeaders 获取响应的所有http头
语法: strValue = oXMLHttpRequest.getAllResponseHeaders();

var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/sample.xml", false);
xmlhttp.send();
alert(xmlhttp.getAllResponseHeaders());

输出由web服务器返回的http头信息,example:
Server:Microsoft-IIS/5.1
X-Powered-By:ASP.NET
Date:Sat, 07 Jun 2003 23:23:06 GMT
Content-Type:text/xml
Accept-Ranges:bytes
Last Modified:Sat, 06 Jun 2003 17:19:04 GMT
ETag:"a0e2eeba4f2cc31:97f"
Content-Length:9

备注:
每个http头名称和值用冒号分割,并以\r\n结束。当send方法完成后才可调用该方法。





getResponseHeader 从响应信息中获取指定的http头
语法: strValue = oXMLHttpRequest.getResponseHeader(bstrHeader);

var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/sample.xml", false);
xmlhttp.send();
alert(xmlhttp.getResponseHeader("Server"));
输出http头中的server列:当前web服务器的版本及名称。



open  创建一个新的http请求,并指定此请求的方法、URL以及验证信息
语法: oXMLHttpRequest.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword);

参数

bstrMethod
http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。

bstrUrl
请求的URL地址,可以为绝对地址也可以为相对地址。

varAsync[可选]
布尔型,指定此请求是否为异步方式,默认为true。如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数。

bstrUser[可选]
如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。

bstrPassword[可选]
验证信息中的密码部分,如果用户名为空,则此值将被忽略。

下面的例子演示从服务器请求book.xml,并显示其中的book字段。
var xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET","http://localhost/books.xml", false);
xmlhttp.send();
var book = xmlhttp.responseXML.selectSingleNode("//book[@id='bk101']");
alert(book.xml);



send 发送请求到http服务器并接收回应
语法: oXMLHttpRequest.send(varBody);

参数

varBody
欲通过此请求发送的数据。

Example

xmlhttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
xmlhttp.open("GET", "http://localhost/sample.xml", false);
xmlhttp.send();
alert(xmlhttp.responseXML.xml);

备注:
此方法的同步或异步方式取决于open方法中的bAsync参数,如果bAsync == False,此方法将会等待请求完成或者超时时才会返回,如果bAsync == True,此方法将立即返回。
如果发送的数据为BSTR,则回应被编码为utf-8, 必须在适当位置设置一个包含charset的文档类型头。
如果发送的数据为XML DOM object,则回应将被编码为在xml文档中声明的编码,如果在xml文档中没有声明编码,则使用默认的UTF-8。



setRequestHeader 单独指定请求的某个http头
语法: oXMLHttpRequest.setRequestHeader(bstrHeader, bstrValue);

参数

bstrHeader
字符串,头名称。

bstrValue
字符串,值。
备注

如果已经存在已此名称命名的http头,则覆盖之。此方法必须在open方法后调用。








posted @ 2016-04-29 09:57  KempJiang  阅读(198)  评论(0编辑  收藏  举报