輕鬆掌握AJAX異步通信


首先簡單的瞭解一下下什麼是Ajax:

       AJAX是一種運用JavaScript和可擴展編輯語言(XML),在網絡瀏覽器和服務器之間傳送或接收數據的技術。

       AJAX是WEB2.0的核心之一.AJAX技術運用於瀏覽器中,使向服務器索取網頁的部分信息成爲可能.

再簡單的瞭解一下下它的工作原理:

       AJAX的工作原理相當與在用戶和服務器之間加了一箇中間層,使用戶請求與服務器響應異步化(我們經常用它來做數據校驗)。這樣還可以把以前的一些服務器負擔的工作轉交給客戶端,利用客戶端閒置的處理能力來處理這些工作,減輕服務器和寬帶的負擔,同時也可以縮短用戶等待時間,提高工作效率。

這樣說有點抽象,看兩個圖就明白了:

   

       上圖爲沒有使用異步通信技術的事件請求,明顯的看出只有得到通知後才能繼續輸入密碼和其它需要的信息,這樣是不是很浪費時間,有時候時間長了,用戶也可能會等的不耐煩,放棄註冊也不是沒有可能。


       上圖爲使用了異步通信技術後的事件請求,用戶不用等待消息的返回,繼續輸入就可以了,當用戶輸入到下面的某一項時,通知的消息可能就返回了,在相應的地方給出提示,這樣也不影響用戶的操作,是不是很友好,很強大。

AJAX的核心是JavaScript對象XMLHttpRequest

       XMLHttpRequest提供客戶端同HTTP服務器異步通信的協議.通過這個協議,AJAX可以使頁面像桌面程序一樣同服務器端進行數據層面的交換,而不必每次都刷新頁面,也不用每次都將數據處理的工作都交給服務器來做,這樣既減輕了服務器負擔又加快了響應速度,縮短了用戶等待的時間.

瞭解幾個XMLHttpRequest對象的方法:

Abort()

停止當前請求

getAllResponseHeaders()

返回HTTP請求的所有響應頭部的鍵/值字符串

getResponseHeader("header")

返回指定頭部屬性的字符串值

Open("method", "url", true)

建立對服務器的調用。Method參數可以是GET POST PUT, url參數可以是相對URL或絕對URL,true/false代表是否要進行異步通信

Send(content)

向服務器發送請求(要是get提交參數爲null)

setRequestHeader("header","value")

爲指定頭部屬性設置指定值

 

瞭解幾個XMLHttpRequest對象的屬性:

         Onreadystatechange狀態改變的時間觸發器,通常綁定一個JavaScript 函數,每當狀態發生改變時,就調用該函數

readyState 請求的狀態,有5個可取值:

0 = 未初始化

1 = 讀取中

2 = 已讀取

3 = 交互中

4 = 完成

responseText     從服務器返回的文本形式的響應內容

responseXML     從服務器返回的兼容DOM的XML文檔對象

Status       從服務器返回的狀態碼,例如404="文件找不到 200 = "成功"

statusText       從服務器返回的狀態文本信息,例如OKNot Found(未找到)

最後我們一起了解一下實現代碼(有詳細的註釋,看了就懂):

<script language ="javascript">
   //定義一個將指向XMLHttpRequest對象的變量
   var xmlHttp = null;
   //定義一個函數用於創建XMLHttpRequest對象
   function createXMLHttpRequest(){
       if(window.ActiveXObject){            //表示當前瀏覽器是IE
           xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
       }
       else if(window.XMLHttpRequest){      
           xmlHttp = new XMLHttpRequest();     //表示當前瀏覽器不是IE,如:firefox
       }
}
 
   //定義一個函數用於啓動與服務器的異步通信
   function begin(){
       createXMLHttpRequest();                 //調用createXMLHttpRequest函數
       xmlHttp.onreadystatechange = processor;     //將事件觸發器綁定到 processor上
       xmlHttp.open("GET", "test.xml", true);     //使用GET方法建立對服務器資源test.xml的一個異步調用
       xmlHttp.send(null);                      //向服務器發送請求 ,參數爲null
}
 
   //定義一個狀態處理函數用於處理狀態觸發器的狀態改變
   function processor(){
       //如果處理請求完成
       if(xmlHttp.readyState == 4){
           //如果服務器返回狀態爲成功
           if(xmlHttp.status = 200){
                //將從服務器返回的內容報告給用戶
                alert("從服務器返回的內容爲:"+ xmlHttp.responseText);
           } else{
                alert("請求失敗,錯誤碼="+ xmlHttp.status);
           }
       }
    }
</script>

下一篇博客將介紹AJAX的優缺點以及Jquery是如何對它進行封裝方便我們輕鬆實現異步通信。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章