Ajax應(yīng)用場景 一、適用場景 表單驅(qū)動的交互 傳統(tǒng)的表單提交,在文本框輸入內(nèi)容后,點擊按鈕,后臺處理完畢后,頁面刷新,再回頭檢查是否刷新結(jié)果正確。使用Ajax,在點擊 sunmit按鈕后,立刻進(jìn)行異步處理,并在頁面上快速顯示了更新后的結(jié)果,這里沒有整個頁面刷新的問題。 深層次的樹的導(dǎo)航 深層次的級聯(lián)菜單(樹)的遍歷是一項非常復(fù)雜的任務(wù),使用JavaScript來控制顯示邏輯,使用Ajax延遲加載更深層次的數(shù)據(jù)可以有效 的減輕服務(wù)器的負(fù)擔(dān)。 我們以前的對級聯(lián)菜單的處理多數(shù)是這樣的: 為了避免每次對菜單的操作引起的重載頁面,不采用每次調(diào)用后臺的方式,而是一次性將級聯(lián)菜單的所有數(shù)據(jù)全部讀取出來并寫入數(shù)組, 然后根據(jù)用戶的操作用 JavaScript來控制它的子集項目的呈現(xiàn),這樣雖然解決了操作響應(yīng)速度、不重載頁面以及避免向服務(wù)器頻繁發(fā)送請求的 問題,但是如果用戶不對菜單進(jìn)行 操作或只對菜單中的一部分進(jìn)行操作的話,那讀取的數(shù)據(jù)中的一部分就會成為冗余數(shù)據(jù)而浪費用戶的資源, 特別是在菜單結(jié)構(gòu)復(fù)雜、數(shù)據(jù)量大的情況下(比如菜單有 很多級、每一級菜又有上百個項目),這種弊端就更為突出。 如果在此案中應(yīng)用Ajax后,結(jié)果就會有所改觀: 在初始化頁面時我們只讀出它的第一級的所有數(shù)據(jù)并顯示,在用戶操作一級菜單其中一項時,會通過Ajax向后臺請求當(dāng)前一級項目所屬的 二級子菜單的所有數(shù)據(jù),如 果再繼續(xù)請求已經(jīng)呈現(xiàn)的二級菜單中的一項時,再向后面請求所操作二級菜單項對應(yīng)的所有三級菜單的所有數(shù)據(jù), 以此類推……這樣,用什么就取什么、用多少就取 多少,就不會有數(shù)據(jù)的冗余和浪費,減少了數(shù)據(jù)下載總量,而且更新頁面時不用重載全部內(nèi) 容,只更新需要更新的那部分即可,相對于后臺處理并重載的方式縮短了 用戶等待時間,也把對資源的浪費降到最低。 快速的用戶與用戶間的交流響應(yīng) 在眾多人參與的交流討論的場景下,最不爽的事情就是讓用戶一遍又一遍刷新頁面以便知道是否有新的討論出現(xiàn)。新的回復(fù)應(yīng)該以最快 的速度顯示出來,而把用戶從分神的刷新中解脫出來,Ajax是最好的選擇。 類似投票、yes/no等無關(guān)痛癢的場景 對于類似這樣的場景中,如果提交過程需要達(dá)到40秒,很多的用戶就會直接忽略過去而不會參與,但是Ajax可以把時間控制在1秒之內(nèi) ,從而更多的用戶會加入進(jìn)來。 對數(shù)據(jù)進(jìn)行過濾和操縱相關(guān)數(shù)據(jù)的場景 對數(shù)據(jù)使用過濾器,按照時間排序,或者按照時間和名稱排序,開關(guān)過濾器等等。任何要求具備很高交互性數(shù)據(jù)操縱的場合都應(yīng)該用 JavaScript,而不是用一系列的服務(wù)器請求來完成。在每次數(shù)據(jù)更新后,再對其進(jìn)行查找和處理需要耗費較多的時間,而Ajax可以加速這個過 程。 普通的文本輸入提示和自動完成的場景 在文本框等輸入表單中給予輸入提示,或者自動完成,可以有效的改善用戶體驗,尤其是那些自動完成的數(shù)據(jù)可能來自于服務(wù)器端的場合, Ajax是很好的選擇。 二、不適用場景 部分簡單的表單 雖然表單提交可以從Ajax獲取最大的益處,但一個簡單的評論表單極少能從Ajax得到什么明顯的改善。而一些較少用到的表單提交,Ajax則 幫不上什么忙。 搜索 有些使用了Ajax的搜索引擎如Start.com和Live.com不允許使用瀏覽器的后退按鈕來查看前一次搜索的結(jié)果,這對已經(jīng)養(yǎng)成搜索習(xí)慣的用戶 來說是不可原諒的?,F(xiàn)在Dojo通過iframe來解決這個問題。 基本的導(dǎo)航 使用Ajax來做站點內(nèi)的導(dǎo)航是一個壞主意,為什么不把時間放在讓系統(tǒng)程序作的更好上呢? 替換大量的文本 使用Ajax可以實現(xiàn)頁面的局部刷新,但是如果頁面的每個部分都改變了,為什么不重新做一次服務(wù)器請求呢? 對呈現(xiàn)的操縱 Ajax看起來像是一個純粹的UI技術(shù),但事實上它不是。它實際上是一個數(shù)據(jù)同步、操縱和傳輸?shù)募夹g(shù)。對于可維護(hù)的干凈的web應(yīng)用,不使 用Ajax來控制頁面呈現(xiàn)是一個不錯的主意。JavaScript可以很簡單的處理XHMTL/HTML/DOM,使用CSS規(guī)則就可以很好的表達(dá)數(shù)據(jù)顯示。 存在的問題 用JavaScript作的Ajax引擎,JavaScript的兼 容性和DeBug都是讓人頭痛的事; Ajax的無刷新重載,由于頁面的變化沒有刷新重載那么明顯,所以容易給用戶帶 來困擾?D?D用戶不太清楚現(xiàn)在的數(shù)據(jù)是新的還是已經(jīng)更新過的;現(xiàn)有的解決有:在相關(guān)位置提示、數(shù)據(jù)更新的區(qū)域設(shè)計得比較明顯、數(shù)據(jù)更新 后給用戶提示等; 中間過程不能被bookmark。解決方法: GoogleMaps通過在頁面上提供一個”link to this page”的辦法來解決。另外,還可以通過url鏈接中加無效的?^標(biāo)記來解決,但還未驗證。 |
|