揭開(kāi)AJAX神秘面紗_AJAX教程
推薦:解讀AJAX是否能夠取代桌面應(yīng)用程序一、 引言 在AJAX是否能夠取代桌面應(yīng)用程序的問(wèn)題上,存在很多爭(zhēng)論。如今,這兩種陣營(yíng)正在逐步形成。在本文中,我的看法是:AJAX不可能取代桌面應(yīng)用程序;但是它將導(dǎo)致一種新型軟件應(yīng)用程序的出現(xiàn)。大多數(shù)AJAX程序應(yīng)該會(huì)是生產(chǎn)工具、協(xié)作和商業(yè)應(yīng)用程序。許
本文通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明如何在IE6中使用AJAX技術(shù)。在這例子中,客戶端每隔十秒,從服務(wù)器端取回一個(gè)隨機(jī)的字符串,在不重新刷新頁(yè)情況下,自動(dòng)更新部分頁(yè)面內(nèi)容。例子僅用到了兩個(gè)jsp文件,client.jsp及server.jsp。
AJAX,即"Asynchronous JavaScript And XML"的縮寫(xiě),可翻譯為異步JavaScript及XML技術(shù)。其核心是一個(gè)寄宿在瀏覽器中名為XMLHTTPRequest的類。通過(guò)此類,可以做到無(wú)需提交表單就可以實(shí)現(xiàn)與服務(wù)器的連接;無(wú)需刷新整個(gè)頁(yè)面,就可以動(dòng)態(tài)更新頁(yè)面中一部分的內(nèi)容。XMLHTTPRequest通常使用XML作為數(shù)據(jù)交換的載體,但也可使用其他的載體,如純文本。簡(jiǎn)單來(lái)說(shuō),就是通過(guò)XMLHTTPRequest發(fā)送信息給服務(wù)器,異步接收服務(wù)器處理并返回信息,然后通過(guò)JavaScript動(dòng)態(tài)更新頁(yè)面的部分內(nèi)容。
盡管AJAX近來(lái)非�;鸨�,但AJAX并非新的技術(shù),正如其名所示,只不過(guò)是JavaScript加上XML的技術(shù)罷了。而且使用上非常簡(jiǎn)單。
應(yīng)用AJAX的流程:
1、定義一個(gè)事件處理器
2、獲取XMLHTTPRequest,并將事件處理器注冊(cè)給它
3、與服務(wù)器連接
4、發(fā)送信息
5、服務(wù)器返回處理完畢的信息
6、每當(dāng)XMLHTTPRequest的狀態(tài)發(fā)生變化,自動(dòng)觸發(fā)事件處理器
7、事件處理器動(dòng)態(tài)更新頁(yè)面
本文通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明如何在IE6中使用AJAX技術(shù)。在這例子中,客戶端每隔十秒,從服務(wù)器端取回一個(gè)隨機(jī)的字符串,在不重新刷新頁(yè)情況下,自動(dòng)更新部分頁(yè)面內(nèi)容。例子僅用到了兩個(gè)jsp文件,client.jsp及server.jsp。為了方便說(shuō)明,我用server.jsp來(lái)代替本應(yīng)作為Servlet的Server.java。
先看client.jsp內(nèi)容:
"http://www.w3.org/TR/html4/loose.dtd">
< meta http-equiv="Content-Type" content="text/html; charset=gb2312">
< script language="JavaScript">
var xmlHttp;
function getGiftFromServer() {
var url = "http://localhost:8084/ajax/server.jsp";
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttp.onreadystatechange = showGift;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
setTimeout("getGiftFromServer()",10000);
}
function showGift() {
if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") {
document.getElementById("output").innerHTML = "Time is for " +
xmlHttp.responseText + ".";
}
}
< /script>
AJAX例子
加載頁(yè)面時(shí),將調(diào)用JavaScript的getGiftFromServer()函數(shù),此函數(shù)完成了上面所提的應(yīng)用AJAX的流程
中第1至第4步,
同時(shí)設(shè)定了一個(gè)每隔十秒自動(dòng)調(diào)用此函數(shù)的定時(shí)器。
而showGift()函數(shù)完成所提流程中的第5至第7步。下面詳細(xì)說(shuō)明每一步驟。
1、定義事件處理器,此處理器將在服務(wù)器端返回?cái)?shù)據(jù)時(shí)自動(dòng)被觸發(fā)執(zhí)行。
function showGift() {
if (xmlHttp.readyState == 4 || xmlHttp.readyState == "complete") {
document.getElementById("output").innerHTML = "Time is for " + xmlHttp.
responseText + ".";
}
}
因?yàn)槲覀冞@里使用異步,readyState屬性用來(lái)判斷服務(wù)器返回信息的狀態(tài)。其值是一個(gè)從0至4的整數(shù),對(duì)應(yīng)于:
0:對(duì)象已創(chuàng)建,但未初始化(未調(diào)用open()方法)
1:對(duì)象已創(chuàng)建,但未調(diào)用send()方法
2:已調(diào)用send()方法,但status及headers還未可用
3:已經(jīng)傳回部分?jǐn)?shù)據(jù),但status及headers還未完全可用
4:已經(jīng)收到所有數(shù)據(jù),可使用所有數(shù)據(jù)
2、獲取XMLHTTPRequest,并將事件處理器注冊(cè)給它
注意:要使用XMLHTTPRequest,需要IE5.0以上的版本。
2.1 取得XMLHTTPRequest
在IE7.0之前獲得XMLHTTPRequest,使用如下代碼:
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
而在IE7.0中:
if (window.XMLHttpRequest) {
xmlHttp = new XMLHttpRequest
}
2.2 注冊(cè)事件處理器
xmlHttp.onreadystatechange = showGift;
showGift為傳入的方法名,每當(dāng)XMLHTTPRequest的狀態(tài)發(fā)生改變時(shí),將執(zhí)行此方法
3. 與服務(wù)器連接并發(fā)送
xmlHttp.open("GET", url , true)
其方法簽名如下:
xmlHttp.open(bstrMethod, bstrUrl, varAsync, bstrUser, bstrPassword)
其中:
bstrMethod: 連接方式,可用的有GET, POST, PUT, or PROPFIND
bstrUrl: 服務(wù)器的url
varAsync(可選): 調(diào)用是否異步,默認(rèn)為true(調(diào)用立即返回)
bstrUser(可選):用戶名,如果url需要驗(yàn)證時(shí)附上
bstrPassword(可選):密碼,如果url需要驗(yàn)證時(shí)附上
open()方法可以直接打開(kāi)一個(gè)xml文檔,并通過(guò)xmlHttp的responseXML來(lái)讀取相應(yīng)的節(jié)點(diǎn)。如下例:
xmlHttp.open("GET","http://localhost/books.xml", false);
xmlHttp.send();
var book = xmlhttp.responseXML.selectSingleNode("//book[@id='bk101']");
4、發(fā)送信息
xmlHttp.send(null)
其方法簽名如下:
xmlHttp.send( [varBody])
varBody(可選): 可為字符串或xml等數(shù)據(jù),可以為null。無(wú)返回值
此方法在open()設(shè)為異步時(shí),立即返回;在open()設(shè)為同步時(shí),必須等到reponse對(duì)象從服務(wù)器中返回時(shí)才返回。
5、服務(wù)器返回處理完畢的信息
此時(shí),該是服務(wù)器端工作了,server.jsp的代碼如下:
從三個(gè)字符串中隨機(jī)挑選一個(gè)寫(xiě)入到response中,返回客戶端。
6、客戶端自動(dòng)探知XMLHTTPRequest的狀態(tài)已經(jīng)發(fā)生變化,自動(dòng)觸發(fā)事件處理器
7、事件處理器動(dòng)態(tài)更新頁(yè)面
處理器讀取xmlHttp.responseText的值,并通過(guò)JavaScript動(dòng)態(tài)更新
document.getElementById("output").innerHTML = "Time is for " + xmlHttp.responseText + ".";結(jié)語(yǔ):由上7步可見(jiàn),AJAX并不復(fù)雜,遠(yuǎn)比想像中要簡(jiǎn)單得多。牢牢記住這一點(diǎn),“AJAX讓我們?cè)诓挥盟⑿马?yè)面的情況下,可以動(dòng)態(tài)地更新網(wǎng)頁(yè)部分內(nèi)容”,然后運(yùn)用到各種需要用到這種性能的場(chǎng)合,將使我們的網(wǎng)頁(yè)更有創(chuàng)意。
分享:基于AJAX技術(shù)實(shí)現(xiàn)Struts校驗(yàn)框架提要 實(shí)時(shí)的數(shù)據(jù)校驗(yàn)是AJAX技術(shù)的重要優(yōu)點(diǎn)之一,Struts校驗(yàn)框架通過(guò)加入這種技術(shù)進(jìn)一步豐富了其MVC,從而使得Web應(yīng)用程序的開(kāi)發(fā)效果更接近于桌面應(yīng)用程序。 一、 引言 校驗(yàn)框架的根本目的是實(shí)現(xiàn)域校驗(yàn)。在Web應(yīng)用程序中有許多方法可以實(shí)現(xiàn)域校驗(yàn),總體上可以
- Ajax中瀏覽器的緩存問(wèn)題解決方法
- AJAX和WebService實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)具體代碼
- ajax 登錄功能簡(jiǎn)單實(shí)現(xiàn)(未連接數(shù)據(jù)庫(kù))
- AJAX和WebService實(shí)現(xiàn)郵箱驗(yàn)證(無(wú)刷新驗(yàn)證郵件地址是否合法)
- AJAX和三層架構(gòu)實(shí)現(xiàn)分頁(yè)功能具體思路及代碼
- 使用AJAX返回WebService里的集合具體實(shí)現(xiàn)
- AJAX獲取服務(wù)器當(dāng)前時(shí)間及時(shí)間格式輸出處理
- ajax傳遞多個(gè)參數(shù)具體實(shí)現(xiàn)
- ajax傳遞一個(gè)參數(shù)具體實(shí)現(xiàn)
- 滑輪滾動(dòng)到頁(yè)面底部ajax加載數(shù)據(jù)配合jsonp實(shí)現(xiàn)探討
- jQery ajax——load()方法示例介紹
- jQuery+Ajax實(shí)現(xiàn)表格數(shù)據(jù)不同列標(biāo)題排序(為表格注入活力)
AJAX教程Rss訂閱編程教程搜索
AJAX教程推薦
- 揭秘Ajax 及其入門(mén)基礎(chǔ)(續(xù))
- 使用AJAX技術(shù)實(shí)現(xiàn)網(wǎng)頁(yè)無(wú)閃自動(dòng)局部刷新
- 如何使用 jQuery(Ajax)/PHP/MySQL實(shí)現(xiàn)自動(dòng)完成功能
- ajax傳遞多個(gè)參數(shù)具體實(shí)現(xiàn)
- 用ajax標(biāo)簽實(shí)現(xiàn)雅虎導(dǎo)航效果實(shí)現(xiàn)
- AJAX教程之由省份選擇城市
- XMLHttpRequest和AJAX入主Web開(kāi)發(fā)
- 掌握Ajax第2部分使用
- 如何用ajax、asp編寫(xiě)的查詢程序
- 利用Ajax實(shí)現(xiàn)在腳本里傳值實(shí)例介紹
猜你也喜歡看這些
- 細(xì)說(shuō)循序漸進(jìn)學(xué)習(xí)Ajax的途徑
- 由淺入深完全掌握Ajax之Ajax 簡(jiǎn)介
- 菜鳥(niǎo)蔡之Ajax復(fù)習(xí)第三篇(Ajax之無(wú)刷新登錄)
- 使用AJAX技術(shù)打造博客無(wú)刷新搜索引擎
- AJAX編程實(shí)踐之與服務(wù)器通信
- Ajax中瀏覽器的緩存問(wèn)題解決方法
- Ajax程序中,自己實(shí)現(xiàn)頁(yè)面前進(jìn)、后退、與標(biāo)簽功能(asp.net2.0)
- Ajax 中的高級(jí)請(qǐng)求和響應(yīng)
- ajax傳遞一個(gè)參數(shù)具體實(shí)現(xiàn)
- 解析AjaxPro與服務(wù)器端交互過(guò)程中如何傳值
- 相關(guān)鏈接:
- 教程說(shuō)明:
AJAX教程-揭開(kāi)AJAX神秘面紗
。