閱讀860 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Ajax基礎 同步請求與異步請求

Ajax基礎講義


 使用XMLHttpRequest發送異步請求

 

使用XMLHttpRequest對象發送請求的三個步驟:

· 創建XHR對象

· 準備請求數據,發送請求

· 當響應到達後,處理響應

 

 

1.如何創建XMLHttpRequest對象:

 var xhr;                        
 if (window.XMLHttpRequest{  
    xhr = new XMLHttpRequest();  
 } else {                        
 xhr = new ActiveXObject("Microsoft.XMLHTTP");//對於其它IE版本請參看Demo代碼
 } else {
   alert("cannot use Ajax");
 }

創建該對象寫出這麼多代碼的原因,就是在不同的瀏覽器下對該對象的實現方式不同。所以為了要適應多種瀏覽器的要求,通過如上代碼來創建XHR對象。

微軟的JS中,並沒有內置的XHR對象,而是通過ActiveX控件實現的,所以的IE瀏覽器下創建XHR對象必須通過ActiveX方式實現。而其它瀏覽器中的JS庫中有內置的JS XHR對象,所以可以直接創建出來。

2.發送請求

在發送請求前,我們需要創建如下的信息:

l 需要請求的URL地址(通過URL地址可以定位到服務器端的一個具體資源)

l 請求的類型,POST方式還是GET方式

l 傳遞給服務器端的參數

l 注冊響應到達後的JS回調函數的名字

調用時使用的三種函數參數格式:

l open(http_method, url)

l open(http_method, url, asynchronous)

l open(http_method, url, asynchronous, userid, password)

 

說明:

第一個參數說明請求的方式,GET或者POST

第二個參數請求的服務器端資源的URL地址

第三個參數,采用異步方式還是同步方式發送請求(說明異步請求和同步請求的區別)

第四個參數,如果服務器端采用了HTTP身份認證方式,那麼需要給出認證的用戶名和密碼

 

例如:

xhr.open('GET', 'servlets/ajax/getItem?id=321', true);

設置回調函數的名字:

xhr.onreadystatechange = parseResponse;

如果采用POST方式,那麼提交給服務器的數據需要調用send方法來發送數據;如果是GET方式那麼send方法給空字符串參數即可

xhr.send('id=321');


3.處理響應 

將請求發送給服務器端後,服務器端的對應程序就會被執行;並將執行後結果返回給客戶端,通過注冊的處理響應的JS函數來處理響應數據。

在你處理響應的JS函數中,需要判斷響應的狀態。通過readyState來判斷,readyState的狀態說明見附表。

在處理響應的方法中:

xhr.onreadystatechange = function(){

  var ready = xhr.readyState;

  if (ready == 4){

    parseCompletedResponse(xhr);

  }

}; 

在status中含有響應的狀態碼,通過響應的狀態碼可以獲得響應的狀態。如200表示響應正常、404表示資源未找到、500表示服務器端程序有錯誤

xhr.onreadystatechange = function(){

  var ready = xhr.readyState;

  if (ready == 4) {

    var status = xhr.status;

    if (status >= 200 && status < 300) {

      parseCompletedResponse(xhr);

    } else {

      parseErroredResponse(xhr);

    }

  }

};




 

響應提供了兩個對象:responseText和responseXML分別用來獲取不同文本格式的響應和XML格式的響應。

其它的一些響應中的方法:

abort():放棄請求。即使請求已經被發送,服務器端已經產生響應,也會忽略響應的結果,而且結束處理。

setRequestHeader(header,value):設置請求的頭部信息。例如:

xhr.setRequestHeader(

  'Content-type', 

  'application/x-www-form-urlencoded'

);

客戶端發送XML格式數據到服務器端的時候,需要對文檔的編碼進行設置。

xhr.setRequestHeader(

  'Content-type', 

  'application/xml; charset=UTF-8'

);

xhr.send("<data source='ajax in practice'>hello world</data>");

getResponseHeader(header)和getAllResponseHeaders()方法:用來獲取響應的頭部信息。getAllResponseHeaders將取回所有響應的頭部的名字。getResponseHeader方法將根據頭部的key值取出value值。

if (xhr.getResponseHeader("Server")

  .indexOf("Microsoft-IIS") != -1 ) {

    alert("The server is a Microsoft IIS server.");

}

 

狀態

描述

0

Uninitialized

open()函數沒有被調用

1

Loading

open()函數正在被調用

2

Loaded

send()函數被調用

3

Interactive

服務器端正在返回結果

4

Complete

請求結束,並且服務器端已經結束發送數據到客戶端

 

最後更新:2017-04-03 15:21:55

  上一篇:go jsp 標簽庫使用小結 JSTL EL表達式 JSP的標簽分類
  下一篇:go 在驅動和應用程序間共享內存