一、 Ajax的簡介
ajax的英文全稱是“Asynchronous Javascript and XML”,即異步Javascript和XML。Ajax的核心技術(shù)理念在于使用XMLHttpRequest對象發(fā)送異步請求。最初為XMLHttpRequest對象提供瀏覽器支持的是微軟公司。是一種用來開發(fā)交互性網(wǎng)頁的技術(shù),其本身由多種技術(shù)組成。
1、ajax的工作原理,首先我們看下傳統(tǒng)網(wǎng)絡應用模型:
圖1 傳統(tǒng)網(wǎng)絡應用模型
下面是ajax風格的通信流
圖2 ajax風格的通信流
使用Ajax可以帶來的好處有以下幾方面。
1. 減輕服務器的負擔。Ajax的原則是“按需取數(shù)據(jù)”,可以最大程度地減少冗余請求,減輕服務器的負擔。
2. 無需刷新頁面,減少用戶心理和實際的等待時間。特別是在讀取大量數(shù)據(jù)時,不會像刷新頁面那樣出現(xiàn)白屏的情況,Ajax使用XMLHttpRequest對象發(fā)送請求并且得到服務器響應,在不重新載入整個頁面的情況下,用JavaScript操作DOM更新頁面。因此在讀取數(shù)據(jù)的過程中,用戶所面對的不是白屏,是原來的頁面內(nèi)容(也可以加一個“Loading”的提示框讓用戶知道目前正在讀取數(shù)據(jù)),只有在數(shù)據(jù)接收完畢之后才更新相應部分的內(nèi)容。這種更新是瞬間的,用戶幾乎感覺不到。
3. 帶來更好的用戶體驗。
4. 可以把以前一些服務器負擔的工作轉(zhuǎn)嫁到客戶端,利用客戶端閑置的能力來處理,減輕服務器負擔,充分利用帶寬資源,節(jié)約空間和寬帶租用成本。
5. 可以調(diào)用外部數(shù)據(jù)。
6. 基于標準化的并被廣泛支持的技術(shù),不需要下載插件或者小程序。
7. 進一步促進頁面呈現(xiàn)與數(shù)據(jù)的分離。
二、ajax的核心—XMLHttpRequest (XHR)
Ajax應用的特點之一就是無需刷新頁面即可向服務器傳輸或者讀寫數(shù)據(jù)(又稱無刷新更新頁面),這一特點主要得益于XMLHttpRequest對象。這樣就可以像桌面應用程序一樣,只同服務器進行數(shù)據(jù)層面的交換,而不用每次都刷新界面,也不用每次將數(shù)據(jù)處理的工作提交給服務器來做。這樣既減輕了服務器的負擔又加快了響應速度、縮短了用戶等候的時間。
坦率的講,Ajax并不是什么新鮮玩藝。也就是說,Ajax并不是一種全新的技術(shù),而更像一種技巧,是把過去的幾種技術(shù)巧妙結(jié)合的技巧。真正與Ajax相關(guān)的新名詞應該是XMLHttpRequest――一個最早在IE 5中出現(xiàn),最近開始在多數(shù)瀏覽器得到支持的用來實現(xiàn)異步通信的對象。正如前面所說,B/S模式是利用瀏覽器作為其通用的客戶端,所以要想異步通訊成為可能,必須要得到瀏覽器的支持。如果不是有了瀏覽器對XMLHttpRequest對象的廣泛支持,我們可能不會看到Ajax的今天,更不會看到許多對Ajax的著名應用,如Google Map,Google Suggest,Ta-da List等。
Ajax的處理過程是怎樣的呢?下圖為Ajax應用的標準處理模式:
圖 3 標準Ajax處理過程
下表是XHR的方法和屬性:
表 1 標準XMLHttpRequest方法
方 法 說 明
abort()
getAllResponseHeader()
getResponseHeader("Header")
open("method", "url")
send(content)
setRequestHeader("header", "value") 停止當前請求
把HTTP請求的所有響應頭部作為鍵/值對返回
返回指定首部的串值
建立對服務器的調(diào)用
向服務器發(fā)送請求
把指定首部設置為所提供的值
表 2 標準XMLHttpRequest屬性
方 法 |
說 明 |
abort() getAllResponseHeader() getResponseHeader("Header") open("method", "url") send(content) setRequestHeader("header", "value") |
停止當前請求 把HTTP請求的所有響應頭部作為鍵/值對返回 返回指定首部的串值 建立對服務器的調(diào)用 向服務器發(fā)送請求 把指定首部設置為所提供的值 |
屬 性 說 明
屬 性 |
說 明 |
onreadystatechange readyState
responseText responseXML status statusText |
每個狀態(tài)改變都會觸發(fā)這個事件處理器 請求的狀態(tài):0-未初始化,1-正在加載,2-已加載,3-交互中,4-完成 服務器的響應,表示為一個文本字符串值 服務器的響應,表示為一個XML 服務器的HTTP狀態(tài)碼 HTTP狀態(tài)碼的相應文本 |
利用XMLHttpRequest對象發(fā)送簡單請求
創(chuàng)建了XMLHttpRequest對象,并了解了XMLHttpRequest對象的方法和屬性之后,讓我們來看看怎樣利用XMLHttpRequest對象發(fā)送簡單的請求。利用XMLHttpRequest對象發(fā)送簡單請求的基本步驟如下:
1) 創(chuàng)建XMLHttpRequest對象實例。
2) 設定XMLHttpRequest對象的回調(diào)函數(shù),利用onreadystatechange屬性。
3) 設定請求屬性:設定HTTP方法(GET或POST);設定目標URL。利用open()方法。
將請求發(fā)送給服務器。利用send()方法。