javaGrowing

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            92 隨筆 :: 33 文章 :: 49 評(píng)論 :: 0 Trackbacks
          在Web客戶端使用xmlhttp對(duì)象,可以十分方便的和服務(wù)器交換數(shù)據(jù),我們可以獲取和發(fā)送任何類型的數(shù)據(jù),甚至二進(jìn)制數(shù)據(jù)到服務(wù)器上。xmlhttp技術(shù)同時(shí)也是目前大多數(shù)無(wú)刷新頁(yè)面使用的和服務(wù)器交換數(shù)據(jù)的方式,這種方式比以往的隱藏iframe的方法要方便和經(jīng)濟(jì)的多。

          ??? 同時(shí)讓我們高興得是xmlhttp并不是IE特有的東西,雖然目前還不是W3C的標(biāo)準(zhǔn),不過(guò)IE, Netscape/Mozilla, 和Safari都支持。在IE中我們使用new ActiveXObject('MSXML2.XMLHTTP')或者new ActiveXObject("Microsoft.XMLHTTP")來(lái)獲得的xmlhttp對(duì)象實(shí)例,使用前者還是后者和客戶端機(jī)器安裝的MSXML版本有關(guān)。在Netscape/Mozilla和Safari中,使用new XMLHttpRequest()來(lái)獲得xmlhttp對(duì)象實(shí)例。比如在IE中,我們通常這樣使用:
          var?xmlhttp?=?null;?
          try?
          {?
          ????xmlhttp?
          =?new?ActiveXObject("MSXML2.XMLHTTP");?
          }?
          catch(e)?
          {?
          ????
          try?
          ????{?
          ????????xmlhttp?
          =?new?ActiveXObject("Microsoft.XMLHTTP");?
          ????}?
          ????
          catch(e2){}?
          }?


          ??? 使用xmlhttp對(duì)象其實(shí)是并不是什么困難的事,它一共就6個(gè)方法8個(gè)屬性。不過(guò)它最主要的是提供了兩種執(zhí)行模式:同步模式和異步模式。同步模式可以比較精確的控制程序流程,可是如果服務(wù)器的Response太慢,browser會(huì)有死掉失去相應(yīng)的問題;而使用異步模式由于是事件觸發(fā)方式控制流程,會(huì)給程序運(yùn)行帶來(lái)一些不可與預(yù)計(jì)的問題,因?yàn)槟悴恢揽蛻舳说却?wù)器Response的過(guò)程中,用戶會(huì)在browser里做什么操作。?

          ??? 下面是一個(gè)同步方式獲取服務(wù)器數(shù)據(jù)的簡(jiǎn)單示例:

          function?GetRemoteData(url)
          {
          ????
          var?xmlhttp?=?new?ActiveXObject("Microsoft.XMLHTTP");
          ????
          try
          ????{??
          ?????????xmlhttp.open('GET',?url,?
          false);
          ?????????
          if?(?xmlhttp.status?==?200?)
          ?????????{
          ?????????????
          return?xmlhttp.responseText;
          ?????????}
          ?????????
          throw?'';?
          ????}
          ????
          catch(e)
          ????{
          ?????????
          return?'';
          ????}
          }


          ??? XMLHTTP對(duì)象的屬性和方法列表(來(lái)自IXMLHTTPRequest接口):

          ???
          NameTypeDescription
          onreadystatechange N/A指定當(dāng)就緒狀態(tài)發(fā)生改變時(shí)調(diào)用的事件處理函數(shù),僅用于異步操作?
          readyState Long異步操作的狀態(tài):未初始化(0),正在加載(1),已加載(2),交互(3),已完成(4)
          responseBody Variant將響應(yīng)信息正文作為unsigned byte數(shù)組返回
          responseStream Variant將響應(yīng)信息正文作為一個(gè)ADO Stream對(duì)象返回
          responseText String將響應(yīng)信息正文作為一個(gè)文本字符串返回
          responseXML Object通過(guò)XMLDom將響應(yīng)信息正文解析為XMLDocument對(duì)象
          status Long服務(wù)器返回的HTTP狀態(tài)碼
          statusText String服務(wù)器HTTP響應(yīng)行狀態(tài)
          ???
          NameDesciption
          abort取消當(dāng)前 HTTP 請(qǐng)求
          getAllResponseHeaders從響應(yīng)信息中檢索所有的標(biāo)頭字段
          getResponseHeader從響應(yīng)信息正文中獲得一個(gè) HTTP 標(biāo)頭值
          open(method, url, boolAsync, bstrUser, bstrPassword)打開一個(gè)與 HTTP 服務(wù)器的連接
          send(varBody)設(shè)定一個(gè)請(qǐng)求的標(biāo)頭字段
          setRequestHeader(bstrHeader, bstrValue)向 HTTP 服務(wù)器發(fā)送請(qǐng)求。可包含正文。

          ??? 這里面顯然就open方法比較麻煩,帶了一大堆參數(shù),它們的含義分別是:
          ???
          ParameterDescription
          methodHTTP的通信方式,比如GET, HEAD, POST, PUT, DELETE, CONNECT等
          url接收數(shù)據(jù)的服務(wù)器的URL地址,URL可帶QueryString
          boolAsync一個(gè)布爾標(biāo)識(shí),說(shuō)明請(qǐng)求是否為異步的。如果是異步通信方式,客戶端就不等待服務(wù)器的響應(yīng);如果是同步方式,客戶機(jī)會(huì)等到服務(wù)器返回消息后才去執(zhí)行其它操作
          bstrUser用戶ID,用于服務(wù)器身份驗(yàn)證
          bstrPassword用戶密碼,用于服務(wù)器身份驗(yàn)證

          ??? 異步通訊的示例:
          xmlhttp.open("GET",?"default.aspx",?true);
          xmlhttp.onreadystatechange?
          =?function()
          {
          ????
          if?(?xmlhttp.readyState==4?)
          ????{
          ????????alert(xmlhttp.responseText);
          ????}
          }
          xmlhttp.send(
          null);


          ??? 其實(shí)使用xmlhttp就這么簡(jiǎn)單,復(fù)雜的是服務(wù)器端數(shù)據(jù)的組織方式,而且需要開發(fā)人員同時(shí)熟悉Client和Server端的開發(fā),才能事半功倍。可是好像說(shuō)了半天這個(gè)玩意兒和xml沒有什么關(guān)系啊,怎么叫xmlhttp呢?我們注意到response的數(shù)據(jù)類型中有一個(gè)responseXML,不過(guò)它解析返回的XMLDocument屬于XMLDOM的內(nèi)容了,和使用xmlhttp來(lái)和服務(wù)器通訊的關(guān)系并不大,以后再來(lái)細(xì)說(shuō)。

          posted on 2006-07-29 11:46 javaGrowing 閱讀(331) 評(píng)論(0)  編輯  收藏 所屬分類: jsp學(xué)習(xí)
          主站蜘蛛池模板: 阿坝| 孝义市| 茶陵县| 盐源县| 富锦市| 阿尔山市| 施秉县| 永济市| 江山市| 夏邑县| 六枝特区| 武安市| 元朗区| 永寿县| 奉节县| 西宁市| 田东县| 曲阜市| 漳浦县| 巴林右旗| 清河县| 衡阳县| 吉林省| 鄯善县| 翁源县| 鄂托克前旗| 舞阳县| 柯坪县| 永泰县| 晋宁县| 海淀区| 桓台县| 灵武市| 河南省| 司法| 霍城县| 鲜城| 九江市| 贵阳市| 黄大仙区| 徐水县|