Ajax全稱為「Asynchronous JavaScript and XML」(非同步JavaScript和XML),指一種建立互動式網頁應用的網頁開發技術。 Ajax技術是目前在瀏覽器中透過JavaScript腳本可以使用的所有技術的集合。 Ajax以一種嶄新的方式來使用所有的這些技術,使得古老的B/S方式的Web開發煥發了新的活力。
Ajax技術之中,最核心的技術就是XMLHttpRequest,它原本的名稱叫做XMLHTTP,是微軟公司為了滿足開發者的需要,1999年在IE5.0瀏覽器中率先推出的。後來這個技術被上述的規格命名為XMLHttpRequest。它正是Ajax技術之所以與眾不同的地方。簡而言之,XMLHttpRequest為運行於瀏覽器中的JavaScript腳本提供了一種在頁面之內與伺服器通訊的手段。頁面內的JavaScript可以在不刷新頁面的情況下從伺服器取得數據,或向伺服器提交數據。 XMLHttpRequest的出現為Web開發提供了一種全新的可能性,甚至整個改變了人們對於Web應用由什麼來組成的看法。它可以使我們以一種全新的方式來做Web開發,為使用者提供更好的互動體驗。
與傳統的Web開發不同,Ajax並不是以一種基於靜態頁面的方式來看待Web應用的。從Ajax的角度看來,Web應用程式應由少量的頁面組成,其中每個頁面其實是一個更小型的Ajax應用程式。每個頁面上面都包含一些使用JavaScript開發的Ajax元件。這些元件使用XMLHttpRequest物件以非同步的方式與伺服器通信,從伺服器取得所需的資料後使用DOM API來更新頁面中的一部分內容。因此Ajax應用與傳統的Web應用的差異主要在三個地方:
1. 不刷新整個頁面,在頁面內與伺服器通訊。
2. 使用非同步方式與伺服器通信,不需要打斷使用者的操作,具有更迅速的回應能力。
3. 應用程式僅由少量頁面組成。大部分互動在頁面之內完成,不需要切換整個頁面。
由此可見,Ajax使得Web應用更加動態,帶來了更高的智能,並且提供了表現能力豐富的Ajax UI元件。這樣一類新型的Web應用叫做RIA(Rich Internet Application)應用程式。
前面是本人在網路上找的一些關於AJAX介紹的資料,以幫助不了解AJAX技術的讀者盡快了解AJAX技術,下面本人將會把自己在實際開發過程中用到的一些AJAX技術及技巧給大家介紹一下.
使用AJAX技術最重要的就是建立XMLHttpRequest物件,關於如何建立該物件網路上有很多資料.本人最常用的一個方法是
function createXMLHttpRequest() {
var xmlhttp;
try {
xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
} catch(e) {
try {
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
} catch(e) {
try {
xmlhttp = new XMLHttpRequest();
} catch(e) {
alert("建立XMLHttpRequest物件失敗!");
}
}
}
return xmlhttp;
}
以下本人將列出一些例子及一些透過這些例子可以學到的東西.
下面一段程式碼是本人在做新增特定物品時,做驗證以判斷該物品是否已在資料庫中存在的例子.
<input type="text" style="width:100%" class="noEmptyInput" name="segment10" value="<%=segment10%>" maxlength="16" onblur="do_verify();">
function do_verify() {
var segment10 = document.mainFrm.segment10.value;
var inventoryItemId = document.mainFrm.inventoryItemId.value;
// alert(segment10)
xmlHttp = createXMLHttpRequest();
var url = "/servlet/com.sino.ies.inv.maintenance.servlet.ItemMaintainServlet?forward=doVerify&segment10=" + segment10 + "&inventoryItemId=" + inventoryItemId;
xmlHttp.onreadystatechange = handleReadyStateChange;
xmlHttp.open("post", url, true); //傳遞資料的方法同樣有GET和POST兩種,但是當方法為POST時下面的一句話就必須寫
xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlHttp.send(null);
}
function handleReadyStateChange() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
if (xmlHttp.responseText == 'Y') {
document.mainFrm.isExist.value = 'Y';
document.getElementById("flag").style.display = "block"
document.mainFrm.segment10.focus();
} else {
document.mainFrm.isExist.value = 'N';
document.getElementById("flag").style.display = "none"
}
} else {
alert(xmlHttp.status);
}
}
}
後台代碼為:
boolean success = itemDAO.doVerifyItem(); //doVerifyItem為驗證指定物品是否在資料庫中存在的主要方法,如果該物品已存在該方法將傳回TRUE
PrintWriter out = res.getWriter();
if (success) {
out.print("Y");
}
out.flush();
out.close();
}