主頁(yè) > 知識(shí)庫(kù) > ajax readyState的五種狀態(tài)詳解

ajax readyState的五種狀態(tài)詳解

熱門標(biāo)簽:上海浦東騰訊地圖標(biāo)注位置 海南銀行智能外呼系統(tǒng)商家 姜堰電銷機(jī)器人 電銷機(jī)器人違法了嗎 澳大利亞城市地圖標(biāo)注 遼寧正規(guī)電銷機(jī)器人 辰溪地圖標(biāo)注 遼寧銀行智能外呼系統(tǒng) 許昌智能電銷機(jī)器人公司
在《Pragmatic Ajax A Web 2.0 Primer 》中對(duì)readyStae狀態(tài)的介紹,摘譯如下:
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 - (未初始化)還沒(méi)有調(diào)用send()方法
1 - (載入)已調(diào)用send()方法,正在發(fā)送請(qǐng)求
2 - (載入完成)send()方法執(zhí)行完成,已經(jīng)接收到全部響應(yīng)內(nèi)容
3 - (交互)正在解析響應(yīng)內(nèi)容
4 - (完成)響應(yīng)內(nèi)容解析完成,可以在客戶端調(diào)用了
對(duì)于readyState的這五種狀態(tài),其他書中大都語(yǔ)焉不詳。像《Foundations of Ajax》中,只在書中的表2-2簡(jiǎn)單地列舉了狀態(tài)的“名稱”--The state of the request. The five possible values are 0 = uninitialized, 1 = loading, 2 = loaded, 3 = interactive, and 4 = complete。而《Ajax in Action》中好像根本就沒(méi)有提到這5種狀態(tài)的細(xì)節(jié)。
《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)對(duì)象已經(jīng)創(chuàng)建,但還沒(méi)有調(diào)用open()方法。
1 (載入):已經(jīng)調(diào)用open() 方法,但尚未發(fā)送請(qǐng)求。
2 (載入完成): 請(qǐng)求已經(jīng)發(fā)送完成。
3 (交互):可以接收到部分響應(yīng)數(shù)據(jù)。
4 (完成):已經(jīng)接收到了全部數(shù)據(jù),并且連接已經(jīng)關(guān)閉。
在《Understanding AJAX: Using JavaScript to Create Rich Internet Applications》中,則用下表進(jìn)行了說(shuō)明:
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)對(duì)象已經(jīng)創(chuàng)建,但尚未初始化(還沒(méi)有調(diào)用open方法)。
(1) LOADING 載入
The object has been created, but the send method has not been called.
(XMLHttpRequest)對(duì)象已經(jīng)創(chuàng)建,但尚未調(diào)用send方法。
(2) LOADED 載入完成
The send method has been called, but the status and headers are not yet available.
已經(jīng)調(diào)用send方法,(HTTP響應(yīng))狀態(tài)及頭部還不可用。
(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.
已經(jīng)接收部分?jǐn)?shù)據(jù)。但若在此時(shí)調(diào)用responseBody和responseText屬性獲取部分結(jié)果將會(huì)產(chǎn)生錯(cuò)誤,因?yàn)闋顟B(tài)和響應(yīng)頭部還不完全可用。
(4) COMPLETED 完成
All the data has been received, and the complete data is available in the responseBody and responseText properties.
已經(jīng)接收到了全部數(shù)據(jù),并且在responseBody和responseText屬性中可以提取到完整的數(shù)據(jù)。
根據(jù)以上幾本書中的關(guān)于readyState五種狀態(tài)的介紹,我認(rèn)為還是《Pragmatic Ajax A Web 2.0 Primer 》比較到位,因?yàn)樗岬搅藢?duì)接收到的數(shù)據(jù)的解析問(wèn)題,其他書中都沒(méi)有提到這一點(diǎn),而這一點(diǎn)正是“(3)交互”階段作為一個(gè)必要的轉(zhuǎn)換過(guò)程存在于“(2)載入完成”到“(4)完成”之間的理由,也就是其任務(wù)是什么。歸結(jié)起來(lái),我覺(jué)得比較理想的解釋方法應(yīng)該以“狀態(tài):任務(wù)(目標(biāo))+過(guò)程+表現(xiàn)(或特征)”表達(dá)模式來(lái)對(duì)這幾個(gè)狀態(tài)進(jìn)行定義比較準(zhǔn)確,而且讓人容易理解。
總結(jié)如下:
readyState 狀態(tài) 狀態(tài)說(shuō)明
(0)未初始化
此階段確認(rèn)XMLHttpRequest對(duì)象是否創(chuàng)建,并為調(diào)用open()方法進(jìn)行未初始化作好準(zhǔn)備。值為0表示對(duì)象已經(jīng)存在,否則瀏覽器會(huì)報(bào)錯(cuò)--對(duì)象不存在。
(1)載入
此階段對(duì)XMLHttpRequest對(duì)象進(jìn)行初始化,即調(diào)用open()方法,根據(jù)參數(shù)(method,url,true)完成對(duì)象狀態(tài)的設(shè)置。并調(diào)用send()方法開(kāi)始向服務(wù)端發(fā)送請(qǐng)求。值為1表示正在向服務(wù)端發(fā)送請(qǐng)求。
(2)載入完成
此階段接收服務(wù)器端的響應(yīng)數(shù)據(jù)。但獲得的還只是服務(wù)端響應(yīng)的原始數(shù)據(jù),并不能直接在客戶端使用。值為2表示已經(jīng)接收完全部響應(yīng)數(shù)據(jù)。并為下一階段對(duì)數(shù)據(jù)解析作好準(zhǔn)備。
(3)交互
此階段解析接收到的服務(wù)器端響應(yīng)數(shù)據(jù)。即根據(jù)服務(wù)器端響應(yīng)頭部返回的MIME類型把數(shù)據(jù)轉(zhuǎn)換成能通過(guò)responseBody、responseText或responseXML屬性存取的格式,為在客戶端調(diào)用作好準(zhǔn)備。狀態(tài)3表示正在解析數(shù)據(jù)。
(4)完成
此階段確認(rèn)全部數(shù)據(jù)都已經(jīng)解析為客戶端可用的格式,解析已經(jīng)完成。值為4表示數(shù)據(jù)解析完畢,可以通過(guò)XMLHttpRequest對(duì)象的相應(yīng)屬性取得數(shù)據(jù)。
概而括之,整個(gè)XMLHttpRequest對(duì)象的生命周期應(yīng)該包含如下階段:
創(chuàng)建-初始化請(qǐng)求-發(fā)送請(qǐng)求-接收數(shù)據(jù)-解析數(shù)據(jù)-完成
在具體應(yīng)用中,明確了readyState的五個(gè)狀態(tài)(XMLHttpRequest對(duì)象的生命周期各個(gè)階段)的含義,就可以消除對(duì)Ajax核心的神秘感(語(yǔ)焉不詳?shù)谋澈笠词枪逝?,制造神秘感;要么就是“以其昏昏,使人昭昭”),迅速把握其?shí)質(zhì),對(duì)減少學(xué)習(xí)中的挫折感和增強(qiáng)自信心都極其有益。
比如,通過(guò)如下示例:
程序代碼
//聲明數(shù)組
var states = ["正在初始化……",
"正在初始化請(qǐng)求……成功!br/>正在發(fā)送請(qǐng)求……",
"成功!br/>正在接收數(shù)據(jù)……",
"完成!br/>正在解析數(shù)據(jù)……",
"完成!br/>"];
//回調(diào)函數(shù)內(nèi)部代碼片段
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;
//其他代碼
}
//別忘記銷毀,防止內(nèi)存泄漏
xmlHttp = null;
}
else
{
var span = document.createElement(“span”);
span.innerHTML = states[xmlHttp.readyState];
document.body.appendChild(span);
}
結(jié)果如下:
正在初始化請(qǐng)求……成功!
正在發(fā)送請(qǐng)求……成功!
正在接收數(shù)據(jù)……完成!
正在解析數(shù)據(jù)……完成!
我們很容易明白XMLHttpRequest對(duì)象在各個(gè)階段都在做什么。因此,也就很容易對(duì)Ajax的核心部分有一個(gè)真正簡(jiǎn)單明了的理解。
附:
Example 1
readyState 返回XMLHTTP請(qǐng)求的當(dāng)前狀態(tài)
語(yǔ)法 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");
}
}
備注 變量,此屬性只讀,狀態(tài)用長(zhǎng)度為4的整型表示.定義如下:
0 (未初始化) 對(duì)象已建立,但是尚未初始化(尚未調(diào)用open方法)
1 (初始化) 對(duì)象已建立,尚未調(diào)用send方法
2 (發(fā)送數(shù)據(jù)) send方法已調(diào)用,但是當(dāng)前的狀態(tài)及http頭未知
3 (數(shù)據(jù)傳送中) 已接收部分?jǐn)?shù)據(jù),因?yàn)轫憫?yīng)及http頭不全,這時(shí)通過(guò)responseBody和responseText獲取部分?jǐn)?shù)據(jù)會(huì)出現(xiàn)錯(cuò)誤,
4 (完成) 數(shù)據(jù)接收完畢,此時(shí)可以通過(guò)通過(guò)responseBody和responseText獲取完整的回應(yīng)數(shù)據(jù)
Example 2
下面這個(gè)范例說(shuō)明如何在運(yùn)行時(shí)以 VBScript 代碼讀取 RDS.DataControl 對(duì)象的 ReadyState 屬性。ReadyState 為只讀屬性。
要測(cè)試該范例,請(qǐng)剪切該代碼并粘貼到標(biāo)準(zhǔn) HTML 文檔的 Body>/Body> 標(biāo)記之間,然后將其命名為“ADCapi9.asp”,ASP 腳本將標(biāo)識(shí)服務(wù)器。
程序代碼
Center>
H2>RDS API Code Examples /H2>
HR>
H3> RDS.DataControl ReadyState property/H3>
/Center>
!-- 在運(yùn)行時(shí)設(shè)置參數(shù)的 RDS.DataControl -->
OBJECT classid="clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
ID=ADC>
PARAM NAME="SQL" VALUE="Select * from Employee for browse">
PARAM NAME="SERVER" VALUE="http://%=Request.ServerVariables("SERVER_NAME")%>">
PARAM NAME="CONNECT" VALUE="dsn=ADCDemo;UID=ADCDemo;PWD=ADCDemo;">
PARAM NAME="ExecuteOptions" VALUE="adcExecAsync">
PARAM NAME="FetchOptions" 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>
您可能感興趣的文章:
  • C#.NET中如何批量插入大量數(shù)據(jù)到數(shù)據(jù)庫(kù)中
  • Asp.Net使用Bulk實(shí)現(xiàn)批量插入數(shù)據(jù)
  • C#/.Net 中快速批量給SQLite數(shù)據(jù)庫(kù)插入測(cè)試數(shù)據(jù)
  • asp.net新聞列表生成靜態(tài)頁(yè)之批量和單頁(yè)生成
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十二:GridView批量更新數(shù)據(jù)
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十四:GridView批量添加數(shù)據(jù)
  • 在ASP.NET 2.0中操作數(shù)據(jù)之三十七:DataList批量更新
  • AJAX(XMLHttpRequest.status)狀態(tài)碼
  • javascript學(xué)習(xí)筆記(七)Ajax和Http狀態(tài)碼
  • asp.net線程批量導(dǎo)入數(shù)據(jù)時(shí)通過(guò)ajax獲取執(zhí)行狀態(tài)

標(biāo)簽:銅川 西藏 伊春 晉城 撫州 威海 深圳 崇左

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ajax readyState的五種狀態(tài)詳解》,本文關(guān)鍵詞  ajax,readyState,的,五種,狀態(tài),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ajax readyState的五種狀態(tài)詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于ajax readyState的五種狀態(tài)詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章