頻道欄目
首頁 > 資訊 > JavaScript > 正文

深入理解Ajax原理

12-02-04        來源:[db:作者]  
收藏   我要投稿
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原理



摘自 陳建秋
 
相關TAG標簽
上一篇:臺積電:絕大多數7nm客戶都會轉向6nm_IT新聞_博客園
下一篇:最后一頁
相關文章
圖文推薦

關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

美女MM131爽爽爽毛片