Ajax不是萬能的,在適合的場合使用Ajax,才能充分發揮它的長處,改善系統效能和使用者體驗,絕不可以為了技術而濫用。Ajax的特點在於非同步互動,動態更新web頁面,因此它的適用範圍是互動較多,頻繁讀取資料的web應用。現在來看幾個Ajax的應用執行個體,讀者可以瞭解如何使用Ajax技術改進現有的web應用系統。
情境1.資料驗證
在填寫表單內容時,需要保證資料的唯一性(例如新使用者註冊填寫的使用者名稱),因此必須對使用者輸入的內容進行資料驗證。資料驗證通常有兩種方式:一種是直接填寫,然後提交表單,這種方式需要將這個頁面提交到伺服器端進行驗證,整個過程不僅時間長而且造成了伺服器不必要的負擔;第二種方式是改進了的驗證過程,使用者可以通過點擊相應的驗證按鈕,開啟新視窗查看驗證結果,但是這樣需要新開一個瀏覽器視窗或者對話方塊,還需要專門編寫驗證的頁面,比較耗費系統資源。而使用Ajax技術,可以由XMLHttpRequest對象發出驗證請求,根據返回的HTTP響應判斷驗證是否成功,整個過程不需要彈出新視窗,也不需要將整個頁面提交到伺服器,快速而又不加重伺服器負擔。
情境2.按需取資料
分類樹或者樹形結構在web應用系統中使用得非常廣泛,例如部門結構,文檔得分類結構常常使用樹形空間呈現。以前每次對分類樹得操作都會引起頁面重載,為了避免這種情況出現,一般不採用每次調用後台得方式,而是一次性將分類結果中得資料一次性讀取出來並寫入數組,然後根據使用者的操作,用JavaScript來控制節點的呈現,這樣雖然解決了操作響應速度,不重複載入頁面以及避免向伺服器頻繁發送請求的問題,但是如果使用者不對分類進行操作或者只對分類樹中的一部分資料進行操作的話(這種情況很普遍的),那麼讀取的資料中就會有相當大的冗餘,浪費了使用者的資源。特別是在分類結構複雜,資料龐大的情況下,這種弊端就更加明顯了。
現在應用Ajax改進分類樹的實現機制。在初始化頁面時,只擷取第一級子分類的資料並且顯示;當使用者點開一級分類的第一節點時,頁面會通過Ajax向伺服器請求當前分類所屬的二級子分類的所有資料;如果再請求已經呈現的二級分類的某一節點時,再次向伺服器請求當前分類所屬的三級子分類的所有資料,以此類推。頁面會根據使用者的操作向伺服器請求它所需要的資料,這樣就不會存在資料的冗餘,減少了資料下載總量。同時,更新頁面時不需要重載所有內容,只更新需要更新的那部分內容即可,相對於以前幕後處理並且重載的方式,大大縮短了使用者的等待時間。
情境3.自動更新頁面
在web應用中有很多資料的變化時十分迅速的,例如最新的熱點新聞,天氣預報以及聊天室內容等。在Ajax出現之前,使用者為了即使瞭解相應的內容必須不斷重新整理頁面,查看是否有新的內容變化,或者頁面本身實現定時重新整理的功能(大多數聊天室頁面就是這樣做的)。有可能會發生這種情況;有一段時間網頁的內容沒有發生任何變化,但是使用者並不知道,仍然不斷的重新整理頁面;或者使用者失去了耐心,放棄了重新整理頁面,卻很有可能在此有新的訊息出現,這樣就錯過了第一時間得到訊息的機會。
應用Ajax可以改善這種這種情況,頁面載入以後,會通過Ajax引擎在後台進行定時的輪詢,向伺服器發送請求,查看是否有最新的訊息。如果有則將新的資料(而不是所有資料)下載並且在頁面上進行動態更新,通過一定的方式通知使用者(實現這樣的功能正是JavaScript的強項)。這樣即避免了使用者不斷手工重新整理頁面的不便,也不會因為重複重新整理頁面造成資源浪費。