XMLHTTPRequest的属性和方法简介

liqing00 2012-07-11

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来创建它吧:

  1. <script language="javascript" type="text/javascript">
  2. <!--
  3. varxmlhttp;
  4. //创建XMLHTTPRequest对象
  5. functioncreateXMLHTTPRequest(){
  6. if(window.ActiveXObject){//判断是否支持ActiveX控件
  7. xmlhttp=newActiveObject("Microsoft.XMLHTTP");//通过实例化ActiveXObject的一个新实例来创建XMLHTTPRequest对象
  8. }
  9. elseif(window.XMLHTTPRequest){//判断是否把XMLHTTPRequest实现为一个本地javascript对象
  10. xmlhttp=newXMLHTTPRequest();//创建XMLHTTPRequest的一个实例(本地javascript对象)
  11. }
  12. }
  13. //-->
  14. </script>

3、属性和方法

由于东西太多现在先用个页面来列举出说有的方法和属性,以后再来详细举例(主要是本人也在学习中)。
  1. <html>
  2. <head>
  3. <title>XMLHTTPRequest对象的说明DEMO</title>
  4. <scriptlanguage="javascript"type="text/javascript">
  5. <!--
  6. varxmlhttp;
  7. //创建一个XMLHTTPRequest对象
  8. functioncreateXMLHTTPRequext(){
  9. if(window.ActiveXObject){
  10. xmlhttp=newActiveXObject('Microsoft.XMLHTTP');
  11. }
  12. elseif(window.XMLHTTPRequest){
  13. xmlhttp=newXMLHTTPRequest();
  14. }
  15. }
  16. functionPostOrder(xmldoc)
  17. {
  18. createXMLHTTPRequext();
  19. //方法:open
  20. //创建一个新的http请求,并指定此请求的方法、URL以及验证信息
  21. //语法:oXMLHttpRequest.open(bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword);
  22. //参数
  23. //bstrMethod
  24. //http方法,例如:POST、GET、PUT及PROPFIND。大小写不敏感。
  25. //bstrUrl
  26. //请求的URL地址,可以为绝对地址也可以为相对地址。
  27. //varAsync[可选]
  28. //布尔型,指定此请求是否为异步方式,默认为true。如果为真,当状态改变时会调用onreadystatechange属性指定的回调函数。
  29. //bstrUser[可选]
  30. //如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,会弹出验证窗口。
  31. //bstrPassword[可选]
  32. //验证信息中的密码部分,如果用户名为空,则此值将被忽略。
  33. //备注:调用此方法后,可以调用send方法向服务器发送数据。
  34. xmlhttp.Open("get","http://localhost/example.htm",false);
  35. //varbook=xmlhttp.responseXML.selectSingleNode("//book[@id='bk101']");
  36. //alert(book.xml);
  37. //属性:onreadystatechange
  38. //onreadystatechange:指定当readyState属性改变时的事件处理句柄
  39. //语法:oXMLHttpRequest.onreadystatechange=funcMyHandler;
  40. //如下的例子演示当XMLHTTPRequest对象的readyState属性改变时调用HandleStateChange函数,
  41. //当数据接收完毕后(readystate==4)此页面上的一个按钮将被激活
  42. //备注:此属性只写,为W3C文档对象模型的扩展.
  43. xmlhttp.onreadystatechange=HandleStateChange;
  44. //方法:send
  45. //发送请求到http服务器并接收回应
  46. //语法:oXMLHttpRequest.send(varBody);
  47. //参数:varBody(欲通过此请求发送的数据。)
  48. //备注:此方法的同步或异步方式取决于open方法中的bAsync参数,如果bAsync==False,此方法将会等待请求完成或者超时时才会返回,如果bAsync==True,此方法将立即返回。
  49. //Thismethodtakesoneoptionalparameter,whichistherequestBodytouse.TheacceptableVARIANTinputtypesareBSTR,SAFEARRAYofUI1(unsignedbytes),IDispatchtoanXMLDocumentObjectModel(DOM)object,andIStream*.Youcanuseonlychunkedencoding(forsending)whensendingIStream*inputtypes.ThecomponentautomaticallysetstheContent-LengthheaderforallbutIStream*inputtypes.
  50. //如果发送的数据为BSTR,则回应被编码为utf-8,必须在适当位置设置一个包含charset的文档类型头。
  51. //IftheinputtypeisaSAFEARRAYofUI1,theresponseissentasiswithoutadditionalencoding.ThecallermustsetaContent-Typeheaderwiththeappropriatecontenttype.
  52. //如果发送的数据为XMLDOMobject,则回应将被编码为在xml文档中声明的编码,如果在xml文档中没有声明编码,则使用默认的UTF-8。
  53. //IftheinputtypeisanIStream*,theresponseissentasiswithoutadditionalencoding.ThecallermustsetaContent-Typeheaderwiththeappropriatecontenttype.
  54. xmlhttp.Send(xmldoc);
  55. //方法:getAllResponseHeaders
  56. //获取响应的所有http头
  57. //语法:strValue=oXMLHttpRequest.getAllResponseHeaders();
  58. //备注:每个http头名称和值用冒号分割,并以\r\n结束。当send方法完成后才可调用该方法。
  59. alert(xmlhttp.getAllResponseHeaders());
  60. //方法:getResponseHeader
  61. //从响应信息中获取指定的http头
  62. //语法:strValue=oXMLHttpRequest.getResponseHeader(bstrHeader);
  63. //备注:当send方法成功后才可调用该方法。如果服务器返回的文档类型为"text/xml",则这句话
  64. //xmlhttp.getResponseHeader("Content-Type");将返回字符串"text/xml"。可以使用getAllResponseHeaders方法获取完整的http头信息。
  65. alert(xmlhttp.getResponseHeader("Content-Type"));//输出http头中的Content-Type列:当前web服务器的版本及名称。
  66. document.frmTest.myButton.disabled=true;
  67. //方法:abort
  68. //取消当前请求
  69. //语法:oXMLHttpRequest.abort();
  70. //备注:调用此方法后,当前请求返回UNINITIALIZED状态。
  71. //xmlhttp.abort();
  72. //方法:setRequestHeader
  73. //单独指定请求的某个http头
  74. //语法:oXMLHttpRequest.setRequestHeader(bstrHeader,bstrValue);
  75. //参数:bstrHeader(字符串,头名称。)
  76. //bstrValue(字符串,值。)
  77. //备注:如果已经存在已此名称命名的http头,则覆盖之。此方法必须在open方法后调用。
  78. //xmlhttp.setRequestHeader(bstrHeader,bstrValue);
  79. }
  80. functionHandleStateChange()
  81. {
  82. //属性:readyState
  83. //返回XMLHTTP请求的当前状态
  84. //语法:lValue=oXMLHttpRequest.readyState;
  85. //备注:变量,此属性只读,状态用长度为4的整型表示.定义如下:
  86. //0(未初始化)对象已建立,但是尚未初始化(尚未调用open方法)
  87. //1(初始化)对象已建立,尚未调用send方法
  88. //2(发送数据)send方法已调用,但是当前的状态及http头未知
  89. //3(数据传送中)已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,
  90. //4(完成)数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据
  91. if(xmlhttp.readyState==4){
  92. document.frmTest.myButton.disabled=false;
  93. //属性:responseBody
  94. //返回某一格式的服务器响应数据
  95. //语法:strValue=oXMLHttpRequest.responseBody;
  96. //备注:变量,此属性只读,以unsignedarray格式表示直接从服务器返回的未经解码的二进制数据。
  97. alert(xmlhttp.responseBody);
  98. //属性:responseStream
  99. //以AdoStream对象的形式返回响应信息
  100. //语法:strValue=oXMLHttpRequest.responseStream;
  101. //备注:变量,此属性只读,以AdoStream对象的形式返回响应信息。
  102. alert(xmlhttp.responseStream);
  103. //属性:responseText
  104. //将响应信息作为字符串返回
  105. //语法:strValue=oXMLHttpRequest.responseText;
  106. //备注:变量,此属性只读,将响应信息作为字符串返回。XMLHTTP尝试将响应信息解码为Unicode字符串,
  107. //XMLHTTP默认将响应数据的编码定为UTF-8,如果服务器返回的数据带BOM(byte-ordermark),XMLHTTP可
  108. //以解码任何UCS-2(bigorlittleendian)或者UCS-4数据。注意,如果服务器返回的是xml文档,此属
  109. //性并不处理xml文档中的编码声明。你需要使用responseXML来处理。
  110. alert(xmlhttp.responseText);
  111. //属性:responseXML
  112. //将响应信息格式化为XmlDocument对象并返回
  113. //语法:varobjDispatch=oXMLHttpRequest.responseXML;
  114. //备注:变量,此属性只读,将响应信息格式化为XmlDocument对象并返回。如果响应数据不是有效的XML文档,
  115. //此属性本身不返回XMLDOMParseError,可以通过处理过的DOMDocument对象获取错误信息。
  116. alert("Result="+xmlhttp.responseXML.xml);
  117. //属性:status
  118. //返回当前请求的http状态码
  119. //语法:lValue=oXMLHttpRequest.status;
  120. //返回值:长整形标准http状态码,定义如下:
  121. //Number:Description
  122. //100:Continue
  123. //101:Switchingprotocols
  124. //200:OK
  125. //201:Created
  126. //202:Accepted
  127. //203:Non-AuthoritativeInformation
  128. //204:NoContent
  129. //205:ResetContent
  130. //206:PartialContent
  131. //300:MultipleChoices
  132. //301:MovedPermanently
  133. //302:Found
  134. //303:SeeOther
  135. //304:NotModified
  136. //305:UseProxy
  137. //307:TemporaryRedirect
  138. //400:BadRequest
  139. //401:Unauthorized
  140. //402:PaymentRequired
  141. //403:Forbidden
  142. //404:NotFound
  143. //405:MethodNotAllowed
  144. //406:NotAcceptable
  145. //407:ProxyAuthenticationRequired
  146. //408:RequestTimeout
  147. //409:Conflict
  148. //410:Gone
  149. //411:LengthRequired
  150. //412:PreconditionFailed
  151. //413:RequestEntityTooLarge
  152. //414:Request-URITooLong
  153. //415:UnsupportedMediaType
  154. //416:RequestedRangeNotSuitable
  155. //417:ExpectationFailed
  156. //500:InternalServerError
  157. //501:NotImplemented
  158. //502:BadGateway
  159. //503:ServiceUnavailable
  160. //504:GatewayTimeout
  161. //505:HTTPVersionNotSupported
  162. //备注:长整形,此属性只读,返回当前请求的http状态码,此属性仅当数据发送并接收完毕后才可获取。
  163. alert(xmlhttp.status);
  164. //属性:statusText
  165. //返回当前请求的响应行状态
  166. //语法:strValue=oXMLHttpRequest.statusText;
  167. //备注:字符串,此属性只读,以BSTR返回当前请求的响应行状态,此属性仅当数据发送并接收完毕后才可获取。
  168. alert(xmlhttp.statusText);
  169. }
  170. }
  171. //-->
  172. </script>
  173. </head>
  174. <body>
  175. <formname="frmTest">
  176. <inputname="myButton"type="button"value="ClickMe"onclick="PostOrder('http://localhost/example.htm');">
  177. </form>
  178. </body>
  179. </html>
 

相关推荐

80477204 / 0评论 2016-01-28