XMLHttpRequest 對象
通過 XMLHttpRequest 對象,您可以在不重新加載整個頁面的情況下更新網頁中的某個部分。
XMLHttpRequest 對象
XMLHttpRequest 對象用於幕後與伺服器交換數據。
XMLHttpRequest 對象是開發者的夢想,因為您可以:
- 在不重新加載頁面的情況下更新網頁
- 在頁面已加載後從伺服器請求數據
- 在頁面已加載後從伺服器接收數據
- 在後臺向伺服器發送數據
創建 XMLHttpRequest 對象
所有現代的流覽器(IE7+、Firefox、Chrome、Safari 和 Opera)都有一個內建的 XMLHttpRequest 對象。
創建 XMLHttpRequest 對象的語法
舊版本的 Internet Explorer(IE5 和 IE6)使用 ActiveX 對象:
為了處理所有現代的流覽器,包括 IE5 和 IE6,請檢查流覽器是否支持 XMLHttpRequest 對象。如果支持,則創建一個 XMLHttpRequest 對象,如果不支持,則創建一個 ActiveX 對象:
實例
發送一個請求到伺服器
為了發送一個請求到伺服器,我們使用 XMLHttpRequest 對象的 open() 和 send() 方法:
xmlhttp.send();
方法 | 描述 |
---|---|
open(method,url,async) | 規定請求的類型,URL,請求是否應該進行非同步處理。 method:請求的類型:GET 或 POST url:檔在伺服器上的位置 async:true(非同步)或 false(同步) |
send(string) | 發送請求到伺服器。 string:僅用於 POST 請求 |
GET 或 POST?
GET 比 POST 簡單並且快速,可用於大多數情況下。
然而,下麵的情況下請始終使用 POST 請求:
- 緩存的檔不是一個選項(更新伺服器上的檔或資料庫)
- 發送到伺服器的數據量較大(POST 沒有大小的限制)
- 發送用戶輸入(可以包含未知字元),POST 比 GET 更強大更安全
URL - 伺服器上的檔
open() 方法的 url 參數,是一個在伺服器上的檔的地址:
該檔可以是任何類型的檔(如 .txt 和 .xml),或伺服器腳本檔(如.html 和 .php,可在發送迴響應之前在伺服器上執行動作)。
非同步 - True 或 False?
如需非同步發送請求,open() 方法的 async 參數必需設置為 true:
發送非同步請求對於 Web 開發人員是一個巨大的進步。在伺服器上執行的許多任務非常費時。
通過非同步發送,JavaScript 不需要等待伺服器的回應,但可以替換為:
- 等待伺服器的回應時,執行其他腳本
- 回應準備時處理回應
Async=true
當使用 async=true 時,在 onreadystatechange 事件中回應準備時規定一個要執行的函數:
實例
Async=false
如需使用 async=false,請更改 open() 方法的第三個參數為 false:
不推薦使用 async=false,但如果處理幾個小的請求還是可以的。
請記住,JavaScript 在伺服器回應準備之前不會繼續執行。如果伺服器正忙或緩慢,應用程式將掛起或停止。
注意:當您使用 async=false 時,不要編寫 onreadystatechange 函數 - 只需要把代碼放置在 send() 語句之後即可:
實例
伺服器回應
如需從伺服器獲取回應,請使用 XMLHttpRequest 對象的 responseText 或 responseXML 屬性。
屬性 | 描述 |
---|---|
responseText | 獲取回應數據作為字串 |
responseXML | ResponseXML 屬性返回 XML 文檔對象,可使用 DOM 節點樹的方法和屬性來檢查和解析該對象。 |
responseText 屬性
如果來自伺服器的回應不是 XML,請使用 responseText 屬性。
responseText 屬性以字串形式返回回應,您可以相應地使用它:
實例
responseXML 屬性
如果來自伺服器的回應是 XML,且您想要把它解析為 XML 對象,請使用 responseXML 屬性:
實例
請求檔 cd_catalog.xml 並解析回應:
onreadystatechange 事件
當請求被發送到伺服器,我們要根據回應執行某些動作。
onreadystatechange 事件在每次 readyState 變化時被觸發。
readyState 屬性持有 XMLHttpRequest 的狀態。
XMLHttpRequest 對象的三個重要的屬性:
屬性 | 描述 |
---|---|
onreadystatechange | 存儲函數(或函數的名稱)在每次 readyState 屬性變化時被自動調用 |
readyState | 存放了 XMLHttpRequest 的狀態。從 0 到 4 變化: 0:請求未初始化 1:伺服器建立連接 2:收到的請求 3:處理請求 4:請求完成和回應準備就緒 |
status | 200:"OK" 404:找不到頁面 |
在 onreadystatechange 事件中,我們規定當伺服器的回應準備處理時會發生什麼。
當 readyState 是 4 或狀態是 200 時,回應準備:
實例
注意:onreadystatechange 事件在每次 readyState 發生變化時被觸發,總共觸發了四次。

更多實例
通過 getAllResponseHeaders() 檢索頭資訊
檢索資源(檔)的頭資訊。
通過 getResponseHeader() 檢索指定頭資訊
檢索資源(檔)的指定頭資訊。
當用戶在輸入字段鍵入字元時,網頁如何與 Web 伺服器進行通信。
網頁如何通過 XMLHttpRequest 對象從資料庫中提取資訊。
創建一個 XMLHttpRequest 從 XML 檔中檢索數據並把數據顯示在一個 HTML 表格中。