XMLHTTP使用詳解

XMLHTTP對象是Microsoft的MSXML開發包中帶的一個用HTTP,XML協議訪問web資源的對象. 從MSXML3.0開始出現. 它在AJAX技術中主要用來從其他網絡資源獲取信息,然後由javascript來更新頁面中的部分內容.
採用這種方法將頁面可更新內容細化,不需要更新很少的內容而刷新整個頁面.
 
XMLHTTP對象的使用方法如下:
1- 創建XMLHTTP對象,不同的瀏覽器創建方式不同,本文以IE爲例說明.
2- 用XMLHTTP對象向外部資源發送請求信息, 同步或異步獲得返回結果
3- 處理返回結果,在頁面上顯示,這時要用到javascript相關技術
 
XMLHTTP對象的方法如下: (函數原型採用VB語法)
 
Sub abort()
中斷當前對象的HTTP請求.
 

 Function getAllResponseHeaders() As String

獲取HTTP響應結果中的全部Header信息,以字符串格式表示

 

 Function getResponseHeader(bstrHeader As String) As String

 
獲取HTTP響應結果Header中指定名稱的值,用字符串表示,如果不存在則返回空串
 
Sub open(bstrMethod As String, bstrUrl As String, [varAsync], [bstrUser], [bstrPassword])
初始化HTTP連接請求對象,設置請求方法,地址,認證信息.
bstrMethod可用值有GET,POST,HEAD,定義向HTTP提交請求的方式;必填
bstrUrl爲要訪問的HTTP資源地址;必填
varAsync 可選項,設置是異步還是同步等待返回結果,true-異步方式,false-同步方式,缺省是異步方式;
如果HTTP請求要求用戶名和口令,則在bstrUser,bstrPassword中設置.
 
 
Sub send ([varBody])
向服務器發送一個HTTP請求,並獲取返回結果.
varBody爲要發送到服務器的數據,通常在POST方式下使用.
 
Sub setRequestHeader(bstrHeader As String, bstrValue As String)
在請求header中設置bstrHeader/bstrValue值對併發送到服務器端.
例:

xmlReq.setRequestHeader("Content-Type",

"application/x-www-form-urlencoded; charset=UTF-8");

 
 

 XMLHTTP屬性

 

onreadystatechange

 
 設置請求對象狀態readystate改變時要調用的函數對象;
 

readyState

 

請求對象的狀態值,含義如下:

0 - 請求對象被創建,但未初始化,即open方法未調用

1 - 裝載中,open方法已調用,send方法未調用

2 - 已裝載,send方法已調用,但還未獲得Header信息

3 - 交互中,已獲取了部分信息,這時調用responseText將得到不完整信息,會返回錯誤

4 - 所有數據已接收完成,可用responseText或responseBody得到完整數據

 

 responseBody

 

表示從HTTP響應得到的返回原始信息,內容的編碼方式決定於請求的服務器端(UTF-8, UCS-2, UCS-4, Shift_JIS等)

 

responseText

 

 HTTP請求返回數據體的字符串表示,缺省情況下用utf-8編碼後返回,如果返回內容中有中文,服務器端的數據必須用utf-8編碼,否則就會出現亂碼。

 

responseStream

 

HTTP請求返回數據的流對象,該對象實現IStream接口.

 

responseXML

 

返回XML格式的數據對象. 服務器端返回數據爲XML格式數據時可用.服務器端用動態語言生成xml時,必須設置content-type爲text/xml,否則客戶端得到的responseXML爲空

 

status

 HTTP返回代碼.
200 - 成功
404 - 錯誤請求
500 - 服務器內部錯誤,等等. 詳見HTTP協議.
 
statusText
HTTP返回狀態文本描述.
 
上面說明了XMLHTTP的方法和屬性,下面列一些使用實例.
 
 
 例1  連接到google,顯示獲得的信息
 
 
<script language="javascript">
 
 
function getGoogle(){
    var xmlReq ;
    try{
        xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
 
        var web = "http://www.google.com";
 
        //異步方式
        xmlReq.open("GET",web,true);
        xmlReq.onreadystatechange = function(){
              if (xmlReq.readystate == 4){
                      document.write(xmlReq.responseText);
              }
 
        }
 
        xmlReq.send();
 
    catch(e){
       
         alert(e);
    }
    
}
 
</script>
 
 
 例2 用POST方法發送數據到web服務器
 
<script language="javascript" >
    var xmlReq ;
    function sendData(){
        
          try{
 
                    xmlReq = new ActiveXObject("MSXML2.XMLHTTP");
                    var data = "name=james&id=1234";
                    var web = "http://www.myweb.com/login.jsp"    //實際運行要換爲存在的一個地址
                    xmlReq.open("POST",web,true);
                    xmlReq.onreadystatechange = resHandler;         //設置返回值處理函數
                    xmlReq.setRequestHeader("Content-Type","

           xmlReq.setRequestHeader("Content-Type",

"application/x-www-form-urlencoded; charset=UTF-8");

                    xmlReq.send(data);
 
          } catch(e) {
               alert(e);
          }
 
    }
 
 
    function ResHandler(){
           if (xmlReq.readystate == 4){
                
                  alert(xmlReq.responseText);
 
           }
    }
 
 
</script>
 
 
在Mozilla瀏覽器中要用xmlReq = new XMLHttpRequest()來創建HTTP請求對象. 其他使用方法與MSXML相同。基於安全問題,如果open中訪問的是另外的域,瀏覽器通常會禁止這種操作,要跨域訪問需修改安全配置。
 
 
參考文檔:
 
1 - http://msdn.microsoft.com  中MSXML SDK
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章