概念:
首先AJAX不只是一個特定的客戶端技術,更應算是一種技巧。Ajax技術的核心操作是用XmlHttpRequest(下稱XHR)對象進行異步數據處理。
所謂異步,即通過 AJAX,JavaScript 無需等待服務器的響應,而是:
Ø 在等待服務器響應時執行其他腳本
Ø 當響應就緒后對響應進行處理
作用:
在AJAX技術中,主要利用JavaScript的XHR對象來傳遞用戶界面上的數據到服務端並返回結果。XHR對象用來響應通過HTTP傳遞的數據,一旦數據返回到客戶端就可以立刻使用DOM(是頁面的一個完全面向對象的表示)技術來操作數據並顯示到網頁上。
AJAX的最終目的是創建更好更快以及交互性更強的 Web 應用程序。
與傳統的web 請求/相應 模式相比:
優點:傳統的網頁(不使用 AJAX)如果需要更新內容,必需重載整個網頁面;AJAX應用可以僅向服務器發送並取回必需的數據,通過在后台與服務器進行少量數據交換,實現網頁的異步更新。避免了在網絡上發送那些沒有改變過的信息。就是能在不更新整個頁面的前提下維護數據,就是允許瀏覽器與服務器進行通信而無需刷新頁面,這使得Web應用程序能夠更為迅捷地回應用戶動作。
缺點:傳統的遵循請求/響應模式的應用,對於每個請求都會加載整個頁面,所以,原來查看的頁面都會放到瀏覽器的歷史棧中。而Ajax用XHR對象做出的請求不會記錄在瀏覽器的歷史中。如果你的用戶習慣使用瀏覽器的“后退”按鈕在Web應用中進行導航,就可能會產生問題。
通過AJAX與服務器的交互的過程:
大體上一般的交互過程只需要簡單的三步即可完成

下面談一下標准的AJAX交互過程:

1. 一個客戶端事件觸發一個Ajax事件,例如
<input type="text" id="txtEmail" onblur=“showHint(str)”/>
2. 創建XHR對象的一個實例,使用open()方法建立調用,並設置URL以及所希望的HTTP方法(get或post)。請求實際上通過一個send()方法調用觸發
<script type="text/javascript">
function showHint(str)
{
var xmlhttp;
if (str.length==0)
{
document.getElementById("txtHint").innerHTML="";
return;
}
//創建 XMLHttpRequest 對象
if (window.XMLHttpRequest)
{// 對於 IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// 對於 IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
//當服務器狀態改變時執行函數
xmlhttp.onreadystatechange=callback;
//把請求發送到服務器上的文件
xmlhttp.open("GET","/ajax/gethint.asp?q="+str,true);
xmlhttp.send();
}
//回調函數
function callback()
{
//響應就緒時
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
</script>
3. 向服務器做出請求,可能調用servlet、CGI腳本或任何服務器端技術
4. 服務器可以做你想做的事情,包括訪問數據庫,甚至訪問另一個系統
5. 請求返回到瀏覽器。Content-Type設置為text/xml的XHR對象只能處理text/html類型的結果。可以設置另外一些首部,使得瀏覽器不會在本地緩存結果:
response.setHeader(“Cache-Control”,”no-cache”);
response.setHeader(“Pragma”,”no-cache”);
6. 我們可以在將XHR對象配置為處理返回時調用callback()函數(xmlHttp.onreadystatechange=callback;)。該函數會檢查XHR對象的readyState屬性,然后查看服務器返回的狀態碼。如果一切正常,callback()函數就會在客戶端做些相應的操作
//回調函數
function callback()
{
//響應就緒時
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
}
}
總結:
(1) 交互過程所用到的XHR對象的主要屬性方法

(2)Ajax的靈活性在於動態改變局部資料量,因此小量傳輸資料才能達到最高效益。如果一大張資料表都要透過DOM的操作來改
變,不如就由后端程式與資料庫來操作,效益更高。
(3)當Ajax載入資料量大時,有時會讓使用者產生錯覺,不確定剛剛按下的按扭是否發生作用。因此開發人員必須設計適當的提
示,讓使用者了解目前程式的執行狀況。
(4)與 POST 相比,GET 更簡單也更快,並且在大部分情況下都能用。
如下情況則須使用POST方式:
Ø 無法使用緩存文件(更新服務器上的文件或數據庫)
Ø向服務器發送大量數據(POST 沒有數據量限制)
Ø 發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠
