zl程序教程

您现在的位置是:首页 >  其他

当前栏目

[转]XMLHTTPRequest的属性和方法简介

属性方法 简介 XMLHttpRequest
2023-06-13 09:13:52 时间

1、XMLHTTPRequest对象什么是?

最通用的定义为:XmlHttp是一套可以在Javascript、VbScript、Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API。XmlHttp最大的用处是可以更新网页的部分内容而不需要刷新整个页面。(这个功能正是AJAX的一大特点之一:))

来自MSDN的解释:XmlHttp提供客户端同http服务器通讯的协议。客户端可以通过XmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用微软XML文档对象模型Microsoft?XMLDocumentObjectModel(DOM)处理回应。

这里说些题外话,其实这个东西很早就出现了,只是以前浏览器的支持不够,只有IE中才支持,所以大多数的WEB程序员都没有怎么用他,但是现在情况发生了很大地改变,Mozilla和Safari把它采用为事实上的标准,主流的浏览器都开始支持XMLHTTPRequest对象了。但是这里需要重点说明的是XMLHTTPRequest目前还不是一个W3C的标准,所以在不同的浏览器上表现也稍有些区别。

2、创建XMLHTTPRequest对象

对了,说到区别,我们这里来看看怎么来声明(使用)它,在使用XMLHTTPRequest对象发送请求和处理响应之前,我们必须要用javascript创建一个XMLHTTPRequest对象。(IE把XMLHTTPRequest实现为一个ActiveX对象,其他的浏览器[如Firefox/Safari/Opear]则把它实现为一个本地的javascript对象)。下面我们就来看看具体怎么运用javascript来创建它吧:

<scriptlanguage="javascript"type="text/javascript">
<!--
varxmlhttp;

//创建XMLHTTPRequest对象
functioncreateXMLHTTPRequest(){
if(window.ActiveXObject){//判断是否支持ActiveX控件
xmlhttp=newActiveObject("Microsoft.XMLHTTP");//通过实例化ActiveXObject的一个新实例来创建XMLHTTPRequest对象
}
elseif(window.XMLHTTPRequest){//判断是否把XMLHTTPRequest实现为一个本地javascript对象
xmlhttp=newXMLHTTPRequest();//创建XMLHTTPRequest的一个实例(本地javascript对象)
}
}
//-->
</script>

3、属性和方法

由于东西太多现在先用个页面来列举出说有的方法和属性,以后再来详细举例(主要是本人也在学习中)。

<html>
<head>
<title>XMLHTTPRequest对象的说明DEMO</title>

<scriptlanguage="javascript"type="text/javascript">
<!--
varxmlhttp;

//创建一个XMLHTTPRequest对象
functioncreateXMLHTTPRequext()
{
if(window.ActiveXObject)
{
xmlhttp=newActiveXObject("Microsoft.XMLHTTP");
}
elseif(window.XMLHTTPRequest)
{
xmlhttp=newXMLHTTPRequest();
}
}

functionPostOrder(xmldoc)
{
createXMLHTTPRequext();

//方法:open
//创建一个新的http请求,并指定此请求的方法、URL以及验证信息
//语法:oXMLHttpRequest.open(bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword);
//参数
//bstrMethod
//http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。

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

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

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

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

//备注:调用此方法后,可以调用send方法向服务器发送数据。
xmlhttp.Open("get","http://localhost/example.htm",false);
//varbook=xmlhttp.responseXML.selectSingleNode("//book[@id="bk101"]");
//alert(book.xml);


//属性:onreadystatechange
//onreadystatechange:指定当readyState属性改变时的事件处理句柄
//语法:oXMLHttpRequest.onreadystatechange=funcMyHandler;
//如下的例子演示当XMLHTTPRequest对象的readyState属性改变时调用HandleStateChange函数,
//当数据接收完毕后(readystate==4)此页面上的一个按钮将被激活
//备注:此属性只写,为W3C文档对象模型的扩展.
xmlhttp.onreadystatechange=HandleStateChange;

//方法:send
//发送请求到http服务器并接收回应
//语法:oXMLHttpRequest.send(varBody);
//参数:varBody(欲通过此请求发送的数据。)
//备注:此方法的同步或异步方式取决于open方法中的bAsync参数,如果bAsync==False,此方法将会等待请求完成或者超时时才会返回,如果bAsync==True,此方法将立即返回。
//Thismethodtakesoneoptionalparameter,whichistherequestBodytouse.TheacceptableVARIANTinputtypesareBSTR,SAFEARRAYofUI1(unsignedbytes),IDispatchtoanXMLDocumentObjectModel(DOM)object,andIStream*.Youcanuseonlychunkedencoding(forsending)whensendingIStream*inputtypes.ThecomponentautomaticallysetstheContent-LengthheaderforallbutIStream*inputtypes.
//如果发送的数据为BSTR,则回应被编码为utf-8,必须在适当位置设置一个包含charset的文档类型头。
//IftheinputtypeisaSAFEARRAYofUI1,theresponseissentasiswithoutadditionalencoding.ThecallermustsetaContent-Typeheaderwiththeappropriatecontenttype.
//如果发送的数据为XMLDOMobject,则回应将被编码为在xml文档中声明的编码,如果在xml文档中没有声明编码,则使用默认的UTF-8。
//IftheinputtypeisanIStream*,theresponseissentasiswithoutadditionalencoding.ThecallermustsetaContent-Typeheaderwiththeappropriatecontenttype.
xmlhttp.Send(xmldoc);

//方法:getAllResponseHeaders
//获取响应的所有http头
//语法:strValue=oXMLHttpRequest.getAllResponseHeaders();
//备注:每个http头名称和值用冒号分割,并以\r\n结束。当send方法完成后才可调用该方法。
alert(xmlhttp.getAllResponseHeaders());

//方法:getResponseHeader
//从响应信息中获取指定的http头
//语法:strValue=oXMLHttpRequest.getResponseHeader(bstrHeader);
//备注:当send方法成功后才可调用该方法。如果服务器返回的文档类型为"text/xml",则这句话
//xmlhttp.getResponseHeader("Content-Type");将返回字符串"text/xml"。可以使用getAllResponseHeaders方法获取完整的http头信息。
alert(xmlhttp.getResponseHeader("Content-Type"));
//输出http头中的Content-Type列:当前web服务器的版本及名称。


document.frmTest.myButton.disabled=true;
//方法:abort
//取消当前请求
//语法:oXMLHttpRequest.abort();
//备注:调用此方法后,当前请求返回UNINITIALIZED状态。
//xmlhttp.abort();

//方法:setRequestHeader
//单独指定请求的某个http头
//语法:oXMLHttpRequest.setRequestHeader(bstrHeader,bstrValue);
//参数:bstrHeader(字符串,头名称。)
//?bstrValue(字符串,值。)
//备注:如果已经存在已此名称命名的http头,则覆盖之。此方法必须在open方法后调用。
//xmlhttp.setRequestHeader(bstrHeader,bstrValue);

}

functionHandleStateChange()
{
//属性:readyState
//返回XMLHTTP请求的当前状态
//语法:lValue=oXMLHttpRequest.readyState;
//备注:变量,此属性只读,状态用长度为4的整型表示.定义如下:
//0(未初始化)对象已建立,但是尚未初始化(尚未调用open方法)
//1(初始化)对象已建立,尚未调用send方法
//2(发送数据)send方法已调用,但是当前的状态及http头未知
//3(数据传送中)已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
//4(完成)数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据
if(xmlhttp.readyState==4)
{
document.frmTest.myButton.disabled=false;

//属性:responseBody
//返回某一格式的服务器响应数据
//语法:strValue=oXMLHttpRequest.responseBody;
//备注:变量,此属性只读,以unsignedarray格式表示直接从服务器返回的未经解码的二进制数据。
alert(xmlhttp.responseBody);

//属性:responseStream
//以AdoStream对象的形式返回响应信息
//语法:strValue=oXMLHttpRequest.responseStream;
//备注:变量,此属性只读,以AdoStream对象的形式返回响应信息。
alert(xmlhttp.responseStream);

//属性:responseText
//将响应信息作为字符串返回
//语法:strValue=oXMLHttpRequest.responseText;
//备注:变量,此属性只读,将响应信息作为字符串返回。XMLHTTP尝试将响应信息解码为Unicode字符串,
//XMLHTTP默认将响应数据的编码定为UTF-8,如果服务器返回的数据带BOM(byte-ordermark),XMLHTTP可
//以解码任何UCS-2(bigorlittleendian)或者UCS-4数据。注意,如果服务器返回的是xml文档,此属
//性并不处理xml文档中的编码声明。你需要使用responseXML来处理。?
alert(xmlhttp.responseText);

//属性:responseXML
//将响应信息格式化为XmlDocument对象并返回
//语法:varobjDispatch=oXMLHttpRequest.responseXML;
//备注:变量,此属性只读,将响应信息格式化为XmlDocument对象并返回。如果响应数据不是有效的XML文档,
//此属性本身不返回XMLDOMParseError,可以通过处理过的DOMDocument对象获取错误信息。
alert("Result="+xmlhttp.responseXML.xml);

//属性:status
//返回当前请求的http状态码
//语法:lValue=oXMLHttpRequest.status;
//返回值:长整形标准http状态码,定义如下:
//Number:Description?
//100:Continue
//101:Switchingprotocols
//200:OK
//201:Created
//202:Accepted
//203:Non-AuthoritativeInformation
//204:NoContent
//205:ResetContent
//206:PartialContent
//300:MultipleChoices
//301:MovedPermanently
//302:Found
//303:SeeOther
//304:NotModified
//305:UseProxy
//307:TemporaryRedirect
//400:BadRequest
//401:Unauthorized
//402:PaymentRequired
//403:Forbidden
//404:NotFound
//405:MethodNotAllowed
//406:NotAcceptable
//407:ProxyAuthenticationRequired
//408:RequestTimeout
//409:Conflict
//410:Gone
//411:LengthRequired
//412:PreconditionFailed
//413:RequestEntityTooLarge
//414:Request-URITooLong
//415:UnsupportedMediaType
//416:RequestedRangeNotSuitable
//417:ExpectationFailed
//500:InternalServerError
//501:NotImplemented
//502:BadGateway
//503:ServiceUnavailable
//504:GatewayTimeout
//505:HTTPVersionNotSupported
//备注:长整形,此属性只读,返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取。
alert(xmlhttp.status);

//属性:statusText
//返回当前请求的响应行状态
//语法:strValue=oXMLHttpRequest.statusText;
//备注:字符串,此属性只读,以BSTR返回当前请求的响应行状态,此属性仅当数据发送并接收完毕后才可获取。
alert(xmlhttp.statusText);
}
}

//-->
</script>

</head>
<body>
<formname="frmTest">
<inputname="myButton"type="button"value="ClickMe"onclick="PostOrder("http://localhost/example.htm");">
</form>
</body>
</html>