XHR的readystate的五個屬性

關於xmlhttprequest的readystate屬性的五個狀態

  昨天做了一個利用ajax實現頁面無刷新的從服務器端獲得時間的例子,當時對於xmlhttprequest對象的readystate的後三個狀態不是很清楚,想了半天,也不明白!後面在程序的不同地方中用alert(xmlhttp.readystate)查看readystate值的變化,並且請教朋友之後,才弄明白其中的幾個問題:創建xmlhttprequest對象之後沒有調用open之前readystate值爲0,調用open()之後就變爲1了,並且此時onreadystatechange函數與open()幾乎是同時執行的。在之後調用send方法之後,在startHttpRequest函數中readystate值仍爲1,而調用send方法之後應該有2,3,4三個狀態,而只有在startHttpRequest函數用alert語句纔可以觀察到3個值!這是爲什麼呢?這是因爲在startHttpRequest函數中當解析到send這一句時,並沒有真正開始執行send執行。只有send執行,纔可以在onreadystatechange函數觀察到狀態值的變化。readystate不是發送的狀態,它是準備發送的狀態,要把它想像成“人間大炮一級準備、二級準備、放”這樣的口號,不是請求發送本身。同時xmlhttp也不是監聽服務器信息,它是在send的時候獲取服務器返回的狀態信息而已,只有一次,監聽則是一直在觀察狀態。至此,心中的疑惑全部解開!

關於readystate五個狀態總結如下:

readyState 狀態    狀態說明
(0)未初始化
此階段確認XMLHttpRequest對象是否創建,併爲調用open()方法進行未初始化作好準備。值爲0表示對象已經存在,否則瀏覽器會報錯--對象不存在。
(1)載入
此階段對XMLHttpRequest對象進行初始化,即調用open()方法,根據參數(method,url,true)完成對象狀態的設置。並調用send()方法開始向服務端發送請求。值爲1表示正在向服務端發送請求。
(2)載入完成
此階段接收服務器端的響應數據。但獲得的還只是服務端響應的原始數據,並不能直接在客戶端使用。值爲2表示已經接收完全部響應數據。併爲下一階段對數據解析作好準備。
(3)交互
此階段解析接收到的服務器端響應數據。即根據服務器端響應頭部返回的MIME類型把數據轉換成能通過responseBody、responseText或responseXML屬性存取的格式,爲在客戶端調用作好準備。狀態3表示正在解析數據。
(4)完成
此階段確認全部數據都已經解析爲客戶端可用的格式,解析已經完成。值爲4表示數據解析完畢,可以通過XMLHttpRequest對象的相應屬性取得數據。
概而括之,整個XMLHttpRequest對象的生命週期應該包含如下階段:
創建-初始化請求-發送請求-接收數據-解析數據-完成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章