AJAX的五種狀態

來源:互聯網
上載者:User
關於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對象的生命週期應該包含如下階段:
建立-初始化請求-發送請求-接收資料-解析資料-完成

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.