xmlhttp是如何完成非同步作業的)

來源:互聯網
上載者:User
ajax第一個字母就是Asynchronous-非同步,那麼到底xmlhttp為何能支援非同步作業呢?
    大家在使用ajaxpro的時候,經常這麼調用伺服器端方法

function DoSomething()
{
    MyPage.Method1.Do(val1,val2,CallBack);
}

function CallBack(res)
{
   //res.value;
}

這樣在調用DoSomething方法的時候,會很快返回,使用者可以繼續操作介面,直到回呼函數得到通知運行,再處理本次請求的結果。這就是一次非同步作業。
  
那是通過什麼樣的機制來完成對CallBack函數的通知的呢,XmlHttpRequest對象支援一種onreadystatechange的委託,
請求j狀態的更改會觸發這個委託。 HTTP
就緒狀態表示請求的狀態或情形。它用於確定該請求是否已經開始、是否得到了響應或者請求/響應模型是否已經完成。它還可以協助確定讀取伺服器提供的響應文
本或資料是否安全。在 Ajax 應用程式中需要瞭解五種就緒狀態:
 0:請求沒有發出(在調用 open() 之前)。

 1:請求已經建立但還沒有發出(調用 send() 之前)。

 2:請求已經發出正在處理之中(這裡通常可以從響應得到內容標題部)。

 3:請求已經處理,響應中通常有部分資料可用,但是伺服器還沒有完成響應。

 4:響應已完成,可以訪問伺服器響應並使用它。
 
   在ajax中最常用的就是狀態標誌4,回呼函數中發現狀態標誌為4的時候,就可以做處理請求資料的操作了。
比如建立XmlHttpRequest的代碼如下:

function CreateXMLHttpRequest(){
   // Initialize Mozilla XMLHttpRequest object
   if (window.XMLHttpRequest){
       xmlHttp = new XMLHttpRequest();
   } 
   // Initialize for IE/Windows ActiveX version
   else if (window.ActiveXObject) {
       try{
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
       } 
       catch (e){
            try{
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e){newsstring = "<div class='loading'>Loading rquest content fail, Please try it again latter</div>";}
       }
   }
}

發出xmlhttprequest並支援回呼函數的代碼如下: 

 xmlHttp.onreadystatechange = function(){
   // only if xmlHttp shows "complete"
   if (xmlHttp.readyState == 4){
      // only http 200 to process
      if (  xmlHttp.status == 200){
         CallBack();         
      }
   }
}
   xmlHttp.open("GET", url, true);
   xmlHttp.setRequestHeader("If-Modified-Since","0");
   xmlHttp.send(null);

CallBack函數就可以執行對請求資料的處理了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.