開發(fā)保留標(biāo)準(zhǔn)的瀏覽器功能的AJAX應(yīng)用_Xml教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:使用javascript xml技術(shù)實(shí)現(xiàn)分頁瀏覽
      基于web的技術(shù)中,分頁是一個(gè)老的不能再老的,但大家津津樂道的問題,隨著xml技術(shù)的日漸應(yīng)用,把xml應(yīng)用到分頁當(dāng)中,也是一種可能,當(dāng)然網(wǎng)上的教程很多,當(dāng)我都是看得稀里糊涂,索性自己寫一個(gè)

      AJAX應(yīng)用因?yàn)樗鼈兊谋憩F(xiàn)力的豐富、更加互動(dòng)和更加迅速的響應(yīng)得到了贊揚(yáng)聲;這些優(yōu)點(diǎn)都是通過使用XMLHttpRequest對(duì)象來動(dòng)態(tài)的載入數(shù)據(jù)而獲得的,而不是重新載入新的頁面。在大量的宣傳和刺激中,卻有一些批評(píng)的聲音指出,AJAX應(yīng)用破壞了一些重要的瀏覽器特性,這其中包括對(duì)前進(jìn)/后退按鈕的支持。

      本文首先解釋了為什么除非明確的將那些功能做進(jìn)AJAX應(yīng)用,否則前進(jìn)/后退按鈕和其他一些瀏覽器功能不能正常工作。然后簡(jiǎn)單的列出開發(fā)者如何解決上述問題,最后我們將詳細(xì)的看一看Backbase AJAX引擎是如何提供對(duì)前進(jìn)/后退按鈕和其他一些瀏覽器功能的支持的。

      AJAX應(yīng)用需要一個(gè)后退按鈕嗎?

      AJAX許諾允許開發(fā)者僅僅使用標(biāo)準(zhǔn)的瀏覽器技術(shù)開發(fā)有更好用戶體驗(yàn)的和高度互交的WEB應(yīng)用,這種技術(shù)常常是指DHTML。

      以前,開發(fā)者常常不得不在rich和reach之間做出選擇;前者是指具有高度互交性的交互式的用戶接口,后者是指一個(gè)運(yùn)行在所有WEB瀏覽器上的、不用額外的安裝機(jī)制的前臺(tái)終端。AJAX應(yīng)用將使得前臺(tái)終端既“rich”又“reach”。

      但是到底什么是真正的一個(gè)界面“rich”的含義呢?而什么又是一個(gè)應(yīng)用“reach”的含義呢?

      “rich”的概念不容易定義,但是容易被直觀的感受。如果你看到一個(gè)“rich”界面,你將明白什么是“rich”界面。桌面應(yīng)用像微軟的Office就是一個(gè)“rich”的界面。一個(gè)“rich”的界面使用先進(jìn)的UI控制技術(shù),如Tabs和上下文菜單。它們提供前進(jìn)的互交手段,像當(dāng)它們獲得焦點(diǎn)的時(shí)候,UI元素的drag-and-drop和highlighting。傳統(tǒng)的瀏覽器應(yīng)用不是“rich”的。它們被限制在一些簡(jiǎn)單的控制器里,像Form,而交互只是簡(jiǎn)單的依靠點(diǎn)擊鏈接到一個(gè)新的頁面。看看微軟的email客戶端就能看出其中的差別:Outlook是“rich”的,而hotmail則不是。

      AJAX應(yīng)用因?yàn)樗鼈兊母挥械谋憩F(xiàn)力而得到表揚(yáng),Google的Gmail就是一個(gè)經(jīng)常提及的例子。其他的Google所做的AJAX應(yīng)用,如Google Suggest和Google Map。微軟即將發(fā)布的Web mail客戶端,代號(hào)為:“Kahuna”,或者Backbase RSS Reader也包含了高級(jí)的控制器和互交的模型。看一看Dan Grossman的列表:Top 10 Ajax Applications,那里是一些激動(dòng)人心的關(guān)于“rich”界面的列表。

      因此我可以得出結(jié)論,AJAX應(yīng)用很明白的滿足“rich”的概念。但是它是否滿足“reach”呢?

      在AJAX應(yīng)用的絕大多數(shù)基本表單里,如果界面運(yùn)行在一個(gè)WEB瀏覽器里,那么這個(gè)應(yīng)用是“reach”的。AJAX應(yīng)用是基于標(biāo)準(zhǔn)的瀏覽器的,因此能夠被一個(gè)瀏覽器所訪問。

      但是,僅僅被瀏覽器所理解還是不夠的。Jakob Nielson在他的文章Flash: 99% Bad里,指出Flash:“破壞了WEB的基本的交互風(fēng)格”。在使用WEB應(yīng)用的時(shí)候,終端用戶期望一個(gè)確定的交互風(fēng)格。應(yīng)用需要提供傳統(tǒng)的WEB交互風(fēng)格,并且提供如下的可用性特性:

      必須提供“后退/前進(jìn)”按鈕,用戶能夠?yàn)g覽網(wǎng)頁歷史紀(jì)錄

      用戶能夠使用書簽

      必須提供Deep links,以便用戶能夠?qū)⑵渫ㄟ^email發(fā)送給朋友或同事

      必須提供“刷新”按鈕,用來刷新當(dāng)前狀態(tài),而不是通過重新初始化應(yīng)用來獲得

      開發(fā)人員可以通過使用“view source”來查看源代碼

      終端用戶能夠使用“find”來搜索頁面

      搜索引擎能夠?qū)W(wǎng)頁編索引,能夠產(chǎn)生一個(gè)Deep link來搜索它們

      看一看10個(gè)頂級(jí)的AJAX應(yīng)用,表明大多數(shù)的當(dāng)前AJAX應(yīng)用的確破壞了WEB的基本交互風(fēng)格。在接下來的部分里,我們將看一看為什么很多的AJAX應(yīng)用會(huì)這樣。

      為什么AJAX應(yīng)用經(jīng)常性的破壞了后退按鈕?

      我們今天所知道的WEB牢固的建立在以下三個(gè)原則的基礎(chǔ)上:

      使用(D)HTML建立的界面

      使用HTTP為客戶/服務(wù)器通訊

      使用URIs尋址

      上面的原則決定了我們所獲取的WEB應(yīng)用有一定的局限性,而AJAX應(yīng)用正是通過沖破這種局限性的限制而使得界面變得更加豐富。正像我以前的文章:A Backbase Ajax Front-end for J2EE Applications所解釋的。AJAX引入了廣泛使用的java script(AJAX中的J)來創(chuàng)建豐富的UI界面控制器和交互。AJAX也引入了異步的XML通訊(AJAX中的A和X),這是通過引入XMLHttpRequest對(duì)象來載入新的數(shù)據(jù)和表現(xiàn)層邏輯,而沒有頁面刷新。然而,當(dāng)前的AJAX模型,不能夠定位如何處理URIs。

      作為改變使用(D)HTML和HTTP的一個(gè)直接后果,AJAX應(yīng)用破壞了作為WEB基本交互風(fēng)格的后退按鈕和其他的元素。在本文余下的部分,我將解釋如何在AJAX方式下通過處理URIs來修補(bǔ)這種破壞。我首先將說一說為什么URIs會(huì)和傳統(tǒng)的WEB應(yīng)用的交互有關(guān)系。

      用戶交互用術(shù)語來說就是用戶界面的狀態(tài)發(fā)生了改變。終端用戶發(fā)起了狀態(tài)改變,瀏覽器客戶端通過發(fā)送頁面請(qǐng)求到服務(wù)器的方式來處理狀態(tài)變化(REST原則),服務(wù)器通過發(fā)送一個(gè)新的頁面和新的URIs到客戶端來產(chǎn)生一個(gè)新的界面狀態(tài)。

      簡(jiǎn)而言之,每一個(gè)用戶交互是這樣別處理的,通過服務(wù)器的循環(huán)產(chǎn)生如下的結(jié)果:

      產(chǎn)生一個(gè)新的頁面

      產(chǎn)生一個(gè)新的URI

      因?yàn)闉g覽器記錄了連續(xù)的URIs到它的歷史堆棧里,并且將當(dāng)前的URI顯示在地址欄里,WEB的可用性特性就被激活。在地址欄里,用戶可以拷貝URI,并且可以把它發(fā)送給朋友。當(dāng)用戶點(diǎn)擊返回按鈕或從email里粘貼一個(gè)URI到地址欄里,一個(gè)到服務(wù)器的循環(huán)就被觸發(fā)。由于服務(wù)器負(fù)責(zé)狀態(tài)管理,那么服務(wù)器就能產(chǎn)生相應(yīng)的頁面。

      AJAX應(yīng)用和傳統(tǒng)的WEB應(yīng)用的最大的不同在于AJAX應(yīng)用能夠不通過頁面的重載而處理用戶的交互。通過XMLHttpRequest對(duì)象從服務(wù)器載入數(shù)據(jù)就是一個(gè)例子。使用java script處理客戶端drag-and-drop是另外的一個(gè)例子。

      在上面的兩個(gè)例子中,狀態(tài)的變化不是通過產(chǎn)生一個(gè)新的URI得到的。因此,點(diǎn)擊后退按鈕或者刷新按鈕不能得到想要的效果,并且在地址欄里沒有deep-link的URI。

      為了提供傳統(tǒng)的WEB可用性特性,AJAX應(yīng)用需要像傳統(tǒng)的WEB應(yīng)用一樣來處理URIs客戶端。因此AJAX應(yīng)用需要做如下的事:

      當(dāng)一個(gè)客戶端狀態(tài)變化時(shí),產(chǎn)生一個(gè)URI,并且發(fā)送到客戶端

      當(dāng)一個(gè)新的URI被客戶端請(qǐng)求時(shí),保存狀態(tài)

      做到了上面的兩點(diǎn),瀏覽器的歷史紀(jì)錄將會(huì)工作,瀏覽器的地址欄將顯示一個(gè)能發(fā)送給朋友的URI。

      另外一個(gè)困難是決定什么時(shí)候AJAX引擎應(yīng)該做上面的那兩件事(例如,什么樣的狀態(tài)變化將導(dǎo)致產(chǎn)生一個(gè)新的URI)。在傳統(tǒng)的模式中,每一個(gè)頁面刷新都導(dǎo)致一個(gè)URI的更新。在AJAX模式中,每一個(gè)客戶端事件都可能產(chǎn)生一個(gè)URI到瀏覽器堆棧。交互設(shè)計(jì)師和開發(fā)者將決定什么樣的狀態(tài)變化是有意義的。因而只對(duì)那些有意義的狀態(tài)變化產(chǎn)生新的URI。

      分享:改變我們生活的這些XML應(yīng)用
      XHTML 2.0 做了許多擴(kuò)展,增強(qiáng)了作者表達(dá)內(nèi)容結(jié)構(gòu)和含義的能力。打破向后兼容性引起了爭(zhēng)議。一些評(píng)論者認(rèn)為保持 (X)HTML 的名稱只修改版本號(hào)會(huì)造成混亂。   將改變我們生活的XML有關(guān)的

      來源:模板無憂//所屬分類:Xml教程/更新時(shí)間:2008-08-22
      相關(guān)Xml教程