首页 > 其他 > 详细

XMLHTTPRequestObject获取服务器数据

时间:2014-02-25 18:30:53      阅读:350      评论:0      收藏:0      [点我收藏+]

http://www.educity.cn/develop/526316.html

在Web客户端使用xmlhttp对象,可以十分方便的和服务器交换数据,我们可以获取和发送任何类型的数据,甚至二进制数据到服务器上。xmlhttp技术同时也是目前大多数无刷新页面使用的和服务器交换数据的方式,这种方式比以往的隐藏iframe的方法要方便和经济的多。 

    同时让我们高兴的是xmlhttp并不是IE特有的东西,虽然目前还不是W3C的标准,不过IE, Netscape/Mozilla, 和Safari都支持。在IE中我们使用new ActiveXObject(‘MSXML2.XMLHTTP‘)或者new ActiveXObject("Microsoft.XMLHTTP")来获得的xmlhttp对象实例,使用前者还是后者和客户端机器安装的MSXML版本有关。在Netscape/Mozilla和Safari中,使用new XMLHttpRequest()来获得xmlhttp对象实例。比如在IE中,我们通常这样使用: 

bubuko.com,布布扣var xmlhttp = null;  
bubuko.com,布布扣try  
bubuko.com,布布扣 
bubuko.com,布布扣    xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");  
bubuko.com,布布扣 
bubuko.com,布布扣catch(e)  
bubuko.com,布布扣 
bubuko.com,布布扣    try  
bubuko.com,布布扣    {  
bubuko.com,布布扣        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");  
bubuko.com,布布扣    }  
bubuko.com,布布扣    catch(e2){}  
bubuko.com,布布扣

  使用xmlhttp对象其实是并不是什么困难的事,它一共就6个方法8个属性。不过它最主要的是提供了两种执行模式:同步模式和异步模式。同步模式可以比较精确的控制程序流程,可是如果服务器的Response太慢,browser会有死掉失去相应的问题;而使用异步模式由于是事件触发方式控制流程,会给程序运行带来一些不可与预计的问题,因为你不知道客户端等待服务器Response的过程中,用户会在browser里做什么操作。  
    下面是一个同步方式获取服务器数据的简单示例:
bubuko.com,布布扣function GetRemoteData(url) 
bubuko.com,布布扣{ 
bubuko.com,布布扣    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
bubuko.com,布布扣    try 
bubuko.com,布布扣    {   
bubuko.com,布布扣         xmlhttp.open(‘GET‘, url, false); 
bubuko.com,布布扣         if ( xmlhttp.status == 200 ) 
bubuko.com,布布扣         { 
bubuko.com,布布扣             return xmlhttp.responseText; 
bubuko.com,布布扣         } 
bubuko.com,布布扣         throw ‘‘;  
bubuko.com,布布扣    } 
bubuko.com,布布扣    catch(e) 
bubuko.com,布布扣    { 
bubuko.com,布布扣         return ‘‘; 
bubuko.com,布布扣    } 
bubuko.com,布布扣}

 

  异步通讯的示例:

 

  function getData(dataSource, divID)       {

 

        if(XMLHttpRequestObject) {

 

          var obj = document.getElementById(divID);

 

          XMLHttpRequestObject.open("GET", dataSource);

 

          XMLHttpRequestObject.onreadystatechange = function()           {

 

            if (XMLHttpRequestObject.readyState == 4 &&  XMLHttpRequestObject.status == 200) {

 

                obj.innerHTML = XMLHttpRequestObject.responseText;

 

            }  

 

         }

 

          XMLHttpRequestObject.send(null);

 

        }

 

      }

 

  XMLHTTP对象的属性列表(来自IXMLHTTPRequest接口): 

  

   
Name Type Description
onreadystatechange N/A 指定当就绪状态发生改变时调用的事件处理函数,仅用于异步操作 
readyState Long 异步操作的状态:未初始化(0),正在加载(1),已加载(2),交互(3),已完成(4)
responseBody Variant 将响应信息正文作为unsigned byte数组返回
responseStream Variant 将响应信息正文作为一个ADO Stream对象返回
responseText String 将响应信息正文作为一个文本字符串返回
responseXML Object 通过XMLDom将响应信息正文解析为XMLDocument对象
status Long 服务器返回的HTTP状态码
statusText String 服务器HTTP响应行状态

status服务器返回的HTTP状态码: 

  

   
状态码 说明
200 客户端请求成功
302 临时跳转,跳转的地址通过Location指定
400 客户端请求有语法错误,不能被服务器识别
403 服务器收到请求,但是拒绝提供服务
404 请求的资源不存在
500 服务器发生不可预期的错误

 XMLHTTP对象的方法列表(来自IXMLHTTPRequest接口): 

  

   
Name Desciption
abort 取消当前 HTTP 请求
getAllResponseHeaders 从响应信息中检索所有的标头字段
getResponseHeader 从响应信息正文中获得一个 HTTP 标头值
open(method, url, boolAsync, bstrUser, bstrPassword) 打开一个与 HTTP 服务器的连接
send(varBody) 设定一个请求的标头字段
setRequestHeader(bstrHeader, bstrValue) 向 HTTP 服务器发送请求。可包含正文。

 

  这里面显然就open方法比较麻烦,带了一大堆参数,它们的含义分别是:

  

   
Parameter Description
method HTTP的通信方式,比如GET, HEAD, POST, PUT, DELETE, CONNECT等
url 接收数据的服务器的URL地址,URL可带QueryString
boolAsync 一个布尔标识,说明请求是否为异步的。如果是true,就是异步通信方式,客户端就不等待服务器的响应;如果是false,就是同步方式,客户机会等到服务器返回消息后才去执行其它操作
bstrUser 用户ID,用于服务器身份验证
bstrPassword 用户密码,用于服务器身份验证

XMLHTTPRequestObject获取服务器数据

原文:http://www.cnblogs.com/XiaoyangBoke/p/3565309.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!