亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

ajax readyState的五種狀態詳解

2024-09-01 08:31:19
字體:
來源:轉載
供稿:網友
0 - (未初始化)還沒有調用send()方法 1 - (載入)已調用send()方法,正在發送請求 2 - (載入完成)send()方法執行完成,已經接收到全部響應內容 3 - (交互)正在解析響應內容 4 - (完成)響應內容解析完成,可以在客戶端調用了

在《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 Status Code
Status of the XMLHttpRequest Object
(0) UNINITIALIZED 未初始化
The object has been created but not initialized. (The open method has not been called.)
(XMLHttpRequest)對象已經創建,但尚未初始化(還沒有調用open方法)。
(1) LOADING 載入
The object has been created, but the send method has not been called.
(XMLHttpRequest)對象已經創建,但尚未調用send方法。
(2) LOADED 載入完成
The send method has been called, but the status and headers are not yet available.
已經調用send方法,(HTTP響應)狀態及頭部還不可用。
(3) INTERACTIVE 交互
Some data has been received. Calling the responseBody and responseText properties at this state to obtain partial results will return an error, because status and response headers are not fully available.
已經接收部分數據。但若在此時調用responseBody和responseText屬性獲取部分結果將會產生錯誤,因為狀態和響應頭部還不完全可用。
(4) COMPLETED 完成
All the data has been received, and the complete data is available in the responseBody and responseText properties.
已經接收到了全部數據,并且在responseBody和responseText屬性中可以提取到完整的數據。
根據以上幾本書中的關于readyState五種狀態的介紹,我認為還是《Pragmatic Ajax A Web 2.0 Primer 》比較到位,因為它提到了對接收到的數據的解析問題,其他書中都沒有提到這一點,而這一點正是“(3)交互”階段作為一個必要的轉換過程存在于“(2)載入完成”到“(4)完成”之間的理由,也就是其任務是什么。歸結起來,我覺得比較理想的解釋方法應該以“狀態:任務(目標)+過程+表現(或特征)”表達模式來對這幾個狀態進行定義比較準確,而且讓人容易理解。
總結如下:
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對象的生命周期應該包含如下階段:
創建-初始化請求-發送請求-接收數據-解析數據-完成
在具體應用中,明確了readyState的五個狀態(XMLHttpRequest對象的生命周期各個階段)的含義,就可以消除對Ajax核心的神秘感(語焉不詳的背后要么是故弄玄虛,制造神秘感;要么就是“以其昏昏,使人昭昭”),迅速把握其實質,對減少學習中的挫折感和增強自信心都極其有益。
比如,通過如下示例:
程序代碼
//聲明數組
var states = ["正在初始化……",
"正在初始化請求……成功!<br/>正在發送請求……",
"成功!<br/>正在接收數據……",
"完成!<br/>正在解析數據……",
"完成!<br/>"];
//回調函數內部代碼片段
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的核心部分有一個真正簡單明了的理解。
附:
Example 1
readyState 返回XMLHTTP請求的當前狀態
語法 lValue = oXMLHttpRequest.readyState;
程序代碼
var XmlHttp;
XmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");
function send() {
XmlHttp.onreadystatechange = doHttpReadyStateChange;
XmlHttp.open("GET", "http://localhost/sample.xml", true);
XmlHttp.send();
}
function doHttpReadyStateChange() {
if (XmlHttp.readyState == 4) {
alert("Done");
}
}
備注 變量,此屬性只讀,狀態用長度為4的整型表示.定義如下:
0 (未初始化) 對象已建立,但是尚未初始化(尚未調用open方法)
1 (初始化) 對象已建立,尚未調用send方法
2 (發送數據) send方法已調用,但是當前的狀態及http頭未知
3 (數據傳送中) 已接收部分數據,因為響應及http頭不全,這時通過responseBody和responseText獲取部分數據會出現錯誤,
4 (完成) 數據接收完畢,此時可以通過通過responseBody和responseText獲取完整的回應數據
Example 2
下面這個范例說明如何在運行時以 VBScript 代碼讀取 RDS.DataControl 對象的 ReadyState 屬性。ReadyState 為只讀屬性。
要測試該范例,請剪切該代碼并粘貼到標準 HTML 文檔的 <Body></Body> 標記之間,然后將其命名為“ADCapi9.asp”,ASP 腳本將標識服務器。
程序代碼
<Center>
<H2>RDS API Code Examples </H2>
<HR>
<H3> RDS.DataControl ReadyState property</H3>
</Center>
<!-- 在運行時設置參數的 RDS.DataControl -->
<OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
ID=ADC>
<PARAM VALUE="Select * from Employee for browse">
<PARAM VALUE="http://<%=Request.ServerVariables("SERVER_NAME")%>">
<PARAM VALUE="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
<PARAM VALUE="adcExecAsync">
<PARAM VALUE="adcFetchAsync">
</OBJECT>
<Script Language="VBScript">
Sub Window_OnLoad
Select Case ADC1.ReadyState
case 2: MsgBox "Executing Query"
case 3: MsgBox "Fetching records in background"
case 4: MsgBox "All records fetched"
End Select
End Sub
</Script>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情精品久久久久久黑人| 国产亚洲欧美日韩美女| 国产欧美一区二区三区久久人妖| 91sa在线看| 国产精品色视频| 最新的欧美黄色| 色综合久综合久久综合久鬼88| 91九色精品视频| 国产精品国产三级国产aⅴ9色| 久久久国产影院| 国产成人a亚洲精品| www.久久久久久.com| 97香蕉久久超级碰碰高清版| 日韩精品高清视频| 欧美国产日韩二区| 亚洲乱码一区av黑人高潮| 久久精品久久久久电影| 久久艳片www.17c.com| 欧美国产在线电影| 久久免费高清视频| 91国产精品电影| 国产日韩在线视频| 日韩在线视频观看| 欧美在线激情视频| 欧美精品18videosex性欧美| 精品少妇v888av| 亚洲一区国产精品| 91精品国产乱码久久久久久久久| 欧美麻豆久久久久久中文| 亚洲加勒比久久88色综合| 日韩精品在线免费观看| 精品视频在线播放| 欧美第一黄色网| 日本91av在线播放| 欧美电影在线播放| 成人激情av在线| 亚洲毛茸茸少妇高潮呻吟| 欧美性猛交xxxxx水多| 国产精品第一区| 在线观看欧美成人| 国产欧美精品一区二区| 中文字幕日韩av电影| 国产精品海角社区在线观看| 国产精品美女久久久免费| 国产精品一二三在线| 日韩av综合网| 久久伊人精品视频| 自拍视频国产精品| 国产999精品久久久影片官网| 欧美色视频日本版| 日韩欧亚中文在线| 91在线观看免费高清完整版在线观看| 亚洲激情视频网站| 日韩av手机在线| 最新国产成人av网站网址麻豆| 欧美巨乳在线观看| 亚洲激情国产精品| 国产欧美日韩精品专区| 国产精品久久久久久影视| 国产成人精品免高潮在线观看| 在线视频中文亚洲| 日韩毛片在线观看| 正在播放国产一区| 国产午夜精品美女视频明星a级| 日韩成人激情视频| 欧美成人免费小视频| 69av在线播放| 欧美疯狂xxxx大交乱88av| 欧美肥老太性生活视频| 国产精品成人v| 亚洲男人天堂网站| 亚洲自拍av在线| 久久黄色av网站| 57pao成人国产永久免费| 国内外成人免费激情在线视频| 国产精品高潮呻吟久久av无限| 国产精品日韩在线一区| 色香阁99久久精品久久久| 国产一区二区三区视频| 亚洲老头老太hd| 狠狠躁夜夜躁人人爽超碰91| 亚洲欧洲自拍偷拍| 菠萝蜜影院一区二区免费| 国产精品黄页免费高清在线观看| 久久99视频精品| 日韩精品久久久久久久玫瑰园| 色综合色综合网色综合| 精品久久久一区| 欧美性猛交xxxx乱大交| 亚洲理论片在线观看| 91精品久久久久久久久| 日韩精品在线观看一区二区| 精品免费在线视频| 日韩欧中文字幕| 国产免费久久av| 国产精品pans私拍| 狠狠躁夜夜躁人人爽天天天天97| 中文欧美日本在线资源| 久久久av免费| 成人免费淫片aa视频免费| 日韩欧美在线视频日韩欧美在线视频| 丰满岳妇乱一区二区三区| 欧美第一黄网免费网站| 欧美日韩亚洲网| 亚洲日本成人女熟在线观看| 国产精品久在线观看| 热久久免费国产视频| 国产精品女主播| 成人a免费视频| 欧美孕妇性xx| 日韩欧美中文第一页| 欧美国产第一页| 免费91麻豆精品国产自产在线观看| 色偷偷9999www| 欧美日韩色婷婷| 色偷偷av一区二区三区乱| 最新国产成人av网站网址麻豆| 午夜精品美女自拍福到在线| 精品福利一区二区| 亚洲男人av电影| 欧美日韩国产成人高清视频| 中文字幕不卡在线视频极品| 青青草原成人在线视频| 亚洲精品国精品久久99热一| 精品亚洲永久免费精品| 精品亚洲永久免费精品| 欧美日韩福利在线观看| 91欧美日韩一区| 亚洲va久久久噜噜噜久久天堂| 亚洲欧美999| 国产日韩一区在线| 97视频在线观看成人| 中文字幕在线精品| 亚洲一区二区三区在线免费观看| 久久天天躁狠狠躁老女人| 欧美激情视频一区| 久久久这里只有精品视频| 国产精品久久久久久超碰| 亚洲精品98久久久久久中文字幕| 国产成人精品电影久久久| 日韩国产一区三区| 久久99久久久久久久噜噜| 日韩最新av在线| 欧美激情按摩在线| 亚洲激情视频在线播放| 国产精品免费一区| 国产精品一区二区三区久久| 97在线看免费观看视频在线观看| 欧美大尺度激情区在线播放| 日韩欧美主播在线| 国产91在线播放九色快色| 亚洲国产精品大全| 久久高清视频免费| 国产一区二区精品丝袜| 亚洲欧美日韩中文视频| 九九热视频这里只有精品| 国产精品日韩在线播放| 性欧美暴力猛交69hd| 久久99热这里只有精品国产| 91精品视频观看| 欧美精品情趣视频| 国产欧美va欧美va香蕉在线| 视频在线观看一区二区| 亚洲精品久久久久久久久久久久久|