readyState的五种状态详解【转】
在《Pragmatic Ajax?A Web 2.0 Primer 》中偶然看到對readyStae狀態的介紹,感覺這個介紹很實在,摘譯如下:
?0: (Uninitialized) the send( ) method has not yet been invoked.?
?1: (Loading) the send( ) method has been invoked, request in?progress.?
?2: (Loaded) the send( ) method has completed, entire response?received.
?3: (Interactive) the response is being parsed.?
?4: (Completed) the response has been parsed, is ready for harvesting.?
?0 -?(未初始化)還沒有調用send()方法
?1 -?(載入)已調用send()方法,正在發送請求
?2 -?(載入完成)send()方法執行完成,已經接收到全部響應內容
?3 -?(交互)正在解析響應內容
?4 -?(完成)響應內容解析完成,可以在客戶端調用了
對于readyState的這五種狀態,其他書中大都語焉不詳。像《Foundations of Ajax》中,只在書中的表2-2簡單地列舉了狀態的“名稱”--The state of the request. The five possible values are 0 = uninitialized,?1 = loading, 2 = loaded, 3 = interactive, and 4 = complete。而《Ajax in Action》中好像根本就沒有提到這5種狀態的細節。《Professional Ajax》中雖不盡人意,但還是有可取之處:
There are five possible values for readyState:?
0 (Uninitialized): The object has been created but the open() method hasn’t been?called.?
1 (Loading): The open() method has been called but the request hasn’t been sent.?
2 (Loaded): The request has been sent.?
3 (Interactive). A partial response has been received.?
4 (Complete): All data has been received and the connection has been closed.?
readyState有五種可能的值:
0 (未初始化): (XMLHttpRequest)對象已經創建,但還沒有調用open()方法。
1 (載入):已經調用open() 方法,但尚未發送請求。
2 (載入完成): 請求已經發送完成。
3 (交互):可以接收到部分響應數據。
4 (完成):已經接收到了全部數據,并且連接已經關閉。
在《Understanding AJAX: Using JavaScript to Create Rich Internet Applications》中,則用下表進行了說明:
根據以上幾本書中的關于readyState五種狀態的介紹,我認為還是《Pragmatic Ajax?A Web 2.0 Primer 》比較到位,因為它提到了對接收到的數據的解析問題,其他書中都沒有提到這一點,而這一點正是“(3)交互”階段作為一個必要的轉換過程存在于“(2)載入完成”到“(4)完成”之間的理由,也就是其任務是什么。歸結起來,我覺得比較理想的解釋方法應該以“狀態:任務(目標)+過程+表現(或特征)”表達模式來對這幾個狀態進行定義比較準確,而且讓人容易理解。現試總結如下:
概而括之,整個XMLHttpRequest對象的生命周期應該包含如下階段:
創建-初始化請求-發送請求-接收數據-解析數據-完成
在具體應用中,明確了readyState的五個狀態(XMLHttpRequest對象的生命周期各個階段)的含義,就可以消除對Ajax核心的神秘感(語焉不詳的背后要么是故弄玄虛,制造神秘感;要么就是“以其昏昏,使人昭昭”),迅速把握其實質,對減少學習中的挫折感和增強自信心都極其有益。
比如,通過如下示例:
//聲明數組 var states = [“正在初始化……”, “正在初始化請求……成功! 正在發送請求……”, “成功! 正在接收數據……”, “完成! 正在解析數據……”, “完成! ”]; //回調函數內部代碼片段 if (xmlHttp.readyState==4) { var span = document.createElement(“span”); span.innerHTML = states[xmlHttp.readyState]; document.body.appendChild(span); if (xmlHttp.status == 200) { var xmldoc = xmlHttp.responseXML; //其他代碼 } //別忘記銷毀,防止內存泄漏 xmlHttp = null; }else{ var span = document.createElement(“span”); span.innerHTML = states[xmlHttp.readyState]; document.body.appendChild(span); }
結果如下:
正在初始化請求……成功!
正在發送請求……成功!
正在接收數據……完成!
正在解析數據……完成!
我們很容易明白XMLHttpRequest對象在各個階段都在做什么。因此,也就很容易對Ajax的核心部分有一個真正簡單明了的理解。
本博PS:readyState一般用在異步請求時程序響應的判斷,Iframe, javaScript腳本同樣適用,參考另一篇文章:http://d-tune.javaeye.com/blog/506074
文章出處:http://www.cn-cuckoo.com/2007/07/16/the-details-for-five-states-of-readystate-9.html
轉載于:https://www.cnblogs.com/myssh/archive/2009/12/18/1627368.html
總結
以上是生活随笔為你收集整理的readyState的五种状态详解【转】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jsp+servlet+java 实现统
- 下一篇: JVM学习笔记-01-JVM的学习方式