首先簡單的瞭解一下下什麼是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 從服務器返回的狀態文本信息,例如OK或Not 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是如何對它進行封裝方便我們輕鬆實現異步通信。