深入理解Ajax原理

來源:互聯網
上載者:User

1.  概念
 
 
ajax 的全稱是AsynchronousJavaScript and XML,其中,Asynchronous 是非同步意思,它有別於傳統web開發中採用的同步的方式。
 
2.  理解同步非同步
 
非同步傳輸是面向字元的傳輸,它的單位是字元;而同步傳輸是面向位元的傳輸,它的單位是楨,它傳輸的時候要求接受方和發送方的時鐘是保持一致的。
 
舉個例子來說同步和非同步,同步就好像我們買樓一次性支付,而非同步就是買樓分期付款。所以當我們把這種生活中的概念化解釋轉移到理解Ajax非同步上來就發現,它是通過這樣一種非同步方式來讓使用者更加收益,也就是說可以讓使用者的有更好的體驗性。其實這也是Ajax的意義所在。
 
 
 
3.  通過分析XmlHttpRequest來理解Ajax的原理
 
Ajax的原理簡單來說通過XmlHttpRequest對象來向伺服器發非同步請求,從伺服器獲得資料,然後用javascript來操作DOM而更新頁面。這其中最關鍵的一步就是從伺服器獲得請求資料。要清楚這個過程和原理,我們必須對XMLHttpRequest有所瞭解。
 
 
 
XMLHttpRequest是ajax的核心機制,是一種支援非同步請求的技術。簡單的說,也就是javascript可以及時向伺服器提出請求和處理響應,而不阻塞使用者。達到無重新整理的效果。
 
所以要想理解Ajax原理就要先理解XMLHttpRequest的工作原理。
 
  首先,我們先來看看XMLHttpRequest這個對象的屬性。
 
 
 
 
通過上面對XMLHttpRequest對象的理解,我們通過一個樣本來看它的工作原理:
 
 
 
 
這是一個驗證input標籤是不是為空白的一個Ajax的樣本:
 
 
function validate(field) { 
    if (trim(field.value).length != 0) { 
    var xmlHttp = null; 
    //表示當前瀏覽器不是ie,如ns,firefox  
    if(window.XMLHttpRequest) { 
        xmlHttp = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    var url = "user_validate.jsp?userId=" + trim(field.value) + "&time=" + new Date().getTime(); 
             
    //佈建要求方式為GET,佈建要求的URL,設定為非同步提交  
    xmlHttp.open("GET", url, true); 
             
    //將方法地址複製給onreadystatechange屬性  
    //類似於電話號碼  
    xmlHttp.onreadystatechange=function() { 
    //Ajax引擎狀態為成功  
    if (xmlHttp.readyState == 4) { 
         //HTTP協議狀態為成功  
         if (xmlHttp.status == 200) { 
        if (trim(xmlHttp.responseText) != "") { 
             //alert(xmlHttp.responseText);  
             document.getElementById("spanUserId").innerHTML = "<font color='red'>" + xmlHttp.responseText + "</font>" 
        }else { 
            document.getElementById("spanUserId").innerHTML = ""; 
            } 
         }else { 
            alert("請求失敗,錯誤碼=" + xmlHttp.status); 
         } 
         
        }; 
             
    //將設定資訊發送到Ajax引擎  
    xmlHttp.send(null); 
    } else { 
    document.getElementById("spanUserId").innerHTML = ""; 
    }    

function validate(field) {
    if (trim(field.value).length != 0) {
       var xmlHttp = null;
       //表示當前瀏覽器不是ie,如ns,firefox
       if(window.XMLHttpRequest) {
           xmlHttp = new XMLHttpRequest();
       } else if (window.ActiveXObject) {
           xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
       }
       var url = "user_validate.jsp?userId=" + trim(field.value) + "&time=" + new Date().getTime();
                    
       //佈建要求方式為GET,佈建要求的URL,設定為非同步提交
       xmlHttp.open("GET", url, true);
                    
       //將方法地址複製給onreadystatechange屬性
       //類似於電話號碼
       xmlHttp.onreadystatechange=function() {
       //Ajax引擎狀態為成功
       if (xmlHttp.readyState == 4) {
            //HTTP協議狀態為成功
            if (xmlHttp.status == 200) {
              if (trim(xmlHttp.responseText) != "") {
                   //alert(xmlHttp.responseText);
                   document.getElementById("spanUserId").innerHTML = "<font color='red'>" + xmlHttp.responseText + "</font>"
              }else {
                  document.getElementById("spanUserId").innerHTML = "";
               }
            }else {
               alert("請求失敗,錯誤碼=" + xmlHttp.status);
            }
       
        };
                    
       //將設定資訊發送到Ajax引擎
       xmlHttp.send(null);
    } else {
       document.getElementById("spanUserId").innerHTML = "";
    }    
}
 
 
 
 
 
首先建立一個XMLHttpRequest對象,之後javaspcript方法檢查XMLHttpRequest的整體狀態並且保證它已經完成(readyStatus=4),即資料已經發送完畢。然後根據伺服器的設定詢問請求狀態,如果一切已經就緒(status=200),那麼就執行下面需要的操作。
 
 
 
對於XmlHttpRequest的兩個方法,open和send,其中open方法指定了:
 
a、向伺服器提交資料的類型,即post還是get。
 
b、請求的url地址和傳遞的參數。
 
c、傳輸方式,false為同步,true為非同步。預設為true。如果是非同步通訊方式(true),客戶機就不等待伺服器的響應;如果是同步方式(false),客戶機就要等到伺服器返回訊息後才去執行其他動作。
 
之後調用Send方法用來發送請求。
 
 
 
  通過這個樣本我們看到Ajax 基本上就是把JavaScript 技術和XMLHttpRequest對象放在Web 表單和伺服器之間。當使用者向伺服器請求時,資料發送給一些JavaScript 代碼而不是直接發送給伺服器。JavaScript代碼在幕後發送非同步請求,然後伺服器將資料返回JavaScript 代碼,後者決定如何處理這些資料,它可以迅速更新表單資料。這就是Ajax的原理所在。
 
 
 
 
4.  用圖來理解Ajax原理



摘自 陳建秋
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.