可以說Ajax不是一項技術,而是一種Web互動的操作模式。同時,Ajax並不是這兩年出現的什麼新東西,因為所有實現Ajax應用程式的組件都已經在我們的瀏覽器裡存在若干年了。
下面的時序圖可以清晰的展現Ajax技術在用戶端與伺服器之間往返交換資料的過程。
Ajax通過瀏覽器內建的XMLHttpRequest對象與伺服器端互動,但需要注意的是,不同的瀏覽器,建立XMLHttpRequest對象的方法可能不相同,使用下面的代碼應該可以保證在絕大多數的瀏覽器中建立此對象:
/**//*
* Returns a new XMLHttpRequest object, or false if this browser
* doesn't support it
*/
function newXMLHttpRequest()
...{
var xmlreq = false;
if (window.XMLHttpRequest)
...{
// Create XMLHttpRequest object in non-Microsoft browsers
xmlreq = new XMLHttpRequest();
}
else if (window.ActiveXObject)
...{
// Create XMLHttpRequest via MS ActiveX
try
...{
// Try to create XMLHttpRequest in later versions
// of Internet Explorer
xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e1)
...{
// Failed to create required ActiveXObject
try
...{
// Try version supported by older versions
// of Internet Explorer
xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e2)
...{
// Unable to create an XMLHttpRequest with ActiveX
}
}
}
return xmlreq;
}
XMLHttpRequest對象readyState屬性的意義在於表示一次Ajax請求的生命週期狀態,它從0(代表“未初始化”)變化到4(代表“完成”)。每次readyState屬性變化時,readystatechange事件就觸發,則由onreadystatechange屬性指定的事件處理回呼函數就被調用。
XMLHttpRequest對象status屬性的意義在於查看請求是否成功完成。status屬性指向伺服器響應的HTTP狀態返回碼。在執行簡單的GET和POST請求時,可以假設任何大於200的返回碼都是錯誤的。
如果伺服器發送重新導向響應(例如301或302),瀏覽器會透明地進行重新導向並從新的位置擷取資源;XMLHttpRequest看不到重新導向的狀態代碼。而且,瀏覽器會自動添加"Cache-Control: no-cache"頭資訊到所有XMLHttpRequest,這樣用戶端代碼永遠也不用處理304(未經修改)伺服器響應。
需要注意的是,只有當HTTP狀態返回碼為200(OK狀態)時,才表示伺服器處理結果正確返回,然後才能執行用戶端響應代碼。