平凡的清潔工作文4篇
Ajax的核心是JavaScript對象XmlHttpRequest。該對象在Internet Explorer 5中首次引入,它是一種支持異步請求的技術(shù)。簡(jiǎn)而言之,XmlHttpRequest使您可以使用JavaScript向服務(wù)器提出請求并處理響應,而不阻塞用戶(hù)。

在創(chuàng )建Web站點(diǎn)時(shí),在客戶(hù)端執行屏幕更新為用戶(hù)提供了很大的靈活性。下面是使用Ajax可以完成的功能:
* 動(dòng)態(tài)更新購物車(chē)的物品總數,無(wú)需用戶(hù)單擊Update并等待服務(wù)器重新發(fā)送整個(gè)頁(yè)面。
* 提升站點(diǎn)的性能,這是通過(guò)減少從服務(wù)器下載的數據量而實(shí)現的。例如,在A(yíng)mazon的購物車(chē)頁(yè)面,當更新籃子中的一項物品的數量時(shí),會(huì )重新載入整個(gè)頁(yè)面,這必須下載32K的數據。如果使用Ajax計算新的總量,服務(wù)器只會(huì )返回新的總量值,因此所需的帶寬僅為原來(lái)的百分之一。
* 消除了每次用戶(hù)輸入時(shí)的頁(yè)面刷新。例如,在A(yíng)jax中,如果用戶(hù)在分頁(yè)列表上單擊Next,則服務(wù)器數據只刷新列表而不是整個(gè)頁(yè)面。
* 直接編輯表格數據,而不是要求用戶(hù)導航到新的頁(yè)面來(lái)編輯數據。對于A(yíng)jax,當用戶(hù)單擊Edit時(shí),可以將靜態(tài)表格刷新為內容可編輯的表格。用戶(hù)單擊Done之后,就可以發(fā)出一個(gè)Ajax請求來(lái)更新服務(wù)器,并刷新表格,使其包含靜態(tài)、只讀的數據。
一切皆有可能!但愿它能夠激發(fā)您開(kāi)始開(kāi)發(fā)自己的基于A(yíng)jax的站點(diǎn)。然而,在開(kāi)始之前,讓我們介紹一個(gè)現有的Web站點(diǎn),它遵循傳統的提交/等待/重新顯示的范例,我們還將討論Ajax如何提升用戶(hù)體驗。
Ajax可用于那些場(chǎng)景?——一個(gè)例子:MSN Money頁(yè)面
前幾天,在瀏覽MSN Money頁(yè)面的時(shí)候,有一篇關(guān)于房地產(chǎn)投資的文章引起了我的好奇心。我決定使用站點(diǎn)的“Rate this article”(評價(jià)本文)功能,鼓勵其他的用戶(hù)花一點(diǎn)時(shí)間來(lái)閱讀這篇文章。在我單擊vote按鈕并等待了一會(huì )兒之后,整個(gè)頁(yè)面被刷新,在原來(lái)投票問(wèn)題所在的地方出現了一個(gè)漂亮的感謝畫(huà)面。
而Ajax能夠使用戶(hù)的體驗更加愉快,它可以提供響應更加靈敏的UI,并消除頁(yè)面刷新所帶來(lái)的閃爍。目前,由于要刷新整個(gè)頁(yè)面,需要傳送大量的數據,因為必須重新發(fā)送整個(gè)頁(yè)面。如果使用Ajax,服務(wù)器可以返回一個(gè)包含了感謝信息的500字節的消息,而不是發(fā)送26,813字節的消息來(lái)刷新整個(gè)頁(yè)面。即使使用的是高速I(mǎi)nternet,傳送26K和1/2K的差別也非常大。同樣重要的是,只需要刷新與投票相關(guān)的一小節,而不是刷新整個(gè)屏幕。
讓我們利用Ajax實(shí)現自己的基本投票系統。
原始的Ajax:直接使用XmlHttpRequest
如上所述,Ajax的核心是JavaScript對象XmlHttpRequest。下面的示例文章評價(jià)系統將帶您熟悉Ajax的底層基本知識:/pic/ajax-demo/raw-ajax.html。注:如果您已經(jīng)在本地WebLogic容器中安裝了ajax-demo.war,可以導航到/pic/ajax-demo/raw-ajax.html,
瀏覽應用程序,參與投票,并親眼看它如何運轉。熟悉了該應用程序之后,繼續閱讀,進(jìn)一步了解其工作原理細節。
首先,您擁有一些簡(jiǎn)單的定位點(diǎn)標記,它連接到一個(gè)JavaScriptcastVote(rank)函數。
function castVote(rank) {
var url = “/ajax-demo/static-article-ranking.html”;
var callback = processAjaxResponse;
executeXhr(callback, url);
}
該函數為您想要與之通信的服務(wù)器資源創(chuàng )建一個(gè)URL并調用內部函數executeXhr,提供一個(gè)回調JavaScript函數,一旦服務(wù)器響應可用,該函數就被執行。由于我希望它運行在一個(gè)簡(jiǎn)單的Apache環(huán)境中,“cast vote URL”只是一個(gè)簡(jiǎn)單的HTML頁(yè)面。在實(shí)際情況中,被調用的URL將記錄票數并動(dòng)態(tài)地呈現包含投票總數的響應。
下一步是發(fā)出一個(gè)XmlHttpRequest請求:
function executeXhr(callback, url) {
/pic/p>
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = callback;
req.open(“GET”, url, true);
req.send(null);
} /pic/Windows ActiveX version
else if (window.ActiveXObject) {
req = new ActiveXObject(“Microsoft.XMLHTTP”);
if (req) {
req.onreadystatechange = callback;
req.open(“GET”, url, true);
req.send();
}
}
}
如您所見(jiàn),執行一個(gè)XmlHttpRequest并不簡(jiǎn)單,但非常直觀(guān)。和平常一樣,在JavaScript領(lǐng)域,大部分的工作量都花在確保瀏覽器兼容方面。在這種情況下,首先要確定XmlHttpRequest是否可用。如果不能用,很可能要使用Internet Explorer,這樣就要使用所提供的ActiveX實(shí)現。
executeXhr()方法中最關(guān)鍵的部分是這兩行:
req.onreadystatechange = callback;
req.open(“GET”, url, true);
第一行定義了JavaScript回調函數,您希望一旦響應就緒它就自動(dòng)執行,而req.open()方法中所指定的“true”標志說(shuō)明您想要異步執行該請求。
一旦服務(wù)器處理完XmlHttpRequest并返回給瀏覽器,使用req.onreadystatechange指派所設置的回調方法將被自動(dòng)調用。
function processAjaxResponse() {
/pic/p>
if (req.readyState == 4) {
/pic/p>
if (req.status == 200) {
502 502′votes’).innerHTML = req.responseText;
} else {
alert(“There was a problem retrieving the XML data:
” +
req.statusText);
}
}
}
該代碼相當簡(jiǎn)潔,并且使用了幾個(gè)幻數,這使得難以一下子看出發(fā)生了什么。為了弄清楚這一點(diǎn),下面的表格(引用自 /pic/internet/webcontent/xmlhttpreq.html)列舉了常用的 XmlHttpRequest對象屬性。
屬性
描述
onreadystatechange
每次狀態(tài)改變所觸發(fā)事件的事件處理程序
readyState
對象狀態(tài)值:
* 0 = 未初始化(uninitialized)
* 1 = 正在加載(loading)
* 2 = 加載完畢(loaded)
* 3 = 交互(interactive)
* 4 = 完成(complete)
responseText
從服務(wù)器進(jìn)程返回的數據的字符串形式
responseXML
從服務(wù)器進(jìn)程返回的DOM兼容的文檔數據對象
status
從服務(wù)器返回的數字代碼,比如404(未找到)或200(就緒)
statusText
伴隨狀態(tài)碼的字符串信息
現在processVoteResponse()函數開(kāi)始顯示出其意義了。它首先檢查XmlHttpRequest 的整體狀態(tài)以保證它已經(jīng)完成(readyStatus == 4),然后根據服務(wù)器的設定詢(xún)問(wèn)請求狀態(tài)。如果一切正常(status == 200),就使用innerHTML屬性重寫(xiě)DOM的“votes”節點(diǎn)的內容。
既然您親眼看到了XmlHttpRequest對象是如何工作的,就讓我們利用一個(gè)旨在簡(jiǎn)化JavaScript與Java應用程序之間的異步通信的框架來(lái)對具體的細節進(jìn)行抽象。
Ajax: DWR方式
按照與文章評價(jià)系統相同的流程,我們將使用Direct Web Remoting(DWR)框架實(shí)現同樣的功能。
假定文章和投票結果存儲在一個(gè)數據庫中,使用某種對象/關(guān)系映射技術(shù)來(lái)完成抽取工作。為了部署起來(lái)盡可能地簡(jiǎn)單,我們不會(huì )使用數據庫進(jìn)行持久性存儲。此外,為使應用程序盡可能通用,也不使用Web框架。相反,應用程序將從一個(gè)靜態(tài)HTML文件開(kāi)始,可以認為它由服務(wù)器動(dòng)態(tài)地呈現。除了這些簡(jiǎn)化措施,應用程序還應該使用Spring Framework關(guān)聯(lián)一切,以便輕松看出如何在一個(gè)“真實(shí)的”應用程序中使用DWR。
現在應該下載示例應用程序并熟悉它。該應用程序被壓縮為標準的WAR文件,因此您可以把它放置到任何一個(gè)Web容器中——無(wú)需進(jìn)行配置。部署完畢之后,就可以導航到/pic/ajax_demo/dwr-ajax.html來(lái)運行程序。
可以查看HTML源代碼,了解它如何工作。給人印象最深的是,代碼如此簡(jiǎn)單——所有與服務(wù)器的交互都隱藏在 JavaScript對象ajaxSampleSvc的后面。更加令人驚訝的是,ajaxSampleSvc服務(wù)不是由手工編寫(xiě)而是完全自動(dòng)生成的!讓我們繼續,看看這是如何做到的。
引入DWR
如同在“原始的Ajax”一節所演示的那樣,直接使用XmlHttpRequest創(chuàng )建異步請求非常麻煩。不僅JavaScript代碼冗長(cháng),而且必須考慮服務(wù)器端為定位Ajax請求到適當的服務(wù)所需做的工作,并將結果封送到瀏覽器。
設計DWR的目的是要處理將Web頁(yè)面安裝到后端服務(wù)上所需的所有信息管道。它是一個(gè)Java框架,可以很輕松地將它插入到Web應用程序中,以便 JavaScript代碼可以調用服務(wù)器上的服務(wù)。它甚至直接與Spring Framework集成,從而允許用戶(hù)直接向Web客戶(hù)機公開(kāi)bean。
DWR真正的巧妙之處是,在用戶(hù)配置了要向客戶(hù)機公開(kāi)的服務(wù)之后,它使用反射來(lái)生成JavaScript對象,以便 Web頁(yè)面能夠使用這些對象來(lái)訪(fǎng)問(wèn)該服務(wù)。然后Web頁(yè)面只需接合到生成的JavaScript對象,就像它們是直接使用服務(wù)一樣;DWR無(wú)縫地處理所有有關(guān)Ajax和請求定位的瑣碎細節。
【平凡的清潔工作文】相關(guān)文章:
平凡清潔工的作文(精選58篇)10-03
清潔工并不平凡700字作文(精選20篇)07-18
平凡的夜晚不平凡作文01-08
感謝清潔工的作文05-29
清潔工奉獻作文01-21
感謝清潔工作文12-18
清潔工阿姨作文04-20
清潔工掃雪的作文07-12
- 平凡清潔工的作文 推薦度:
- 描寫(xiě)平凡的清潔工作文 推薦度:
- 相關(guān)推薦