<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    憨厚生

    ----Java's Slave----
    ***Java's Host***

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
    【轉】http://www.cnblogs.com/myssh/archive/2009/12/18/1627368.html

    在《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 = [“正在初始化……”, “正在初始化請求……成功! 正在發送請求……”, “成功! 正在接收數據……”, “完成! 正在解析數據……”, “完成! ”]; //回調函數內部代碼片段 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

    posted on 2010-06-07 09:19 二胡 閱讀(629) 評論(2)  編輯  收藏 所屬分類: JSajax

    評論

    # 平特一肖 2013-06-17 13:29 平特一肖
    謝謝你的分享 很不錯的資料


    結果如下:

    正在初始化請求……成功!
    正在發送請求……成功!
    正在接收數據……完成!
    正在解析數據……完成!
      回復  更多評論
      

    # 平特一肖 2013-06-17 13:30 平特一肖
    不錯  回復  更多評論
      

    主站蜘蛛池模板: 亚洲AV无码成人专区| 日本亚洲成高清一区二区三区| 亚洲高清中文字幕| 成人精品一区二区三区不卡免费看| 免费不卡中文字幕在线| 特级毛片A级毛片免费播放| 又粗又大又硬又爽的免费视频| 最新亚洲人成网站在线观看| 全部免费国产潢色一级| 免费又黄又爽又猛大片午夜 | 亚洲成人激情在线| 亚洲免费在线视频| 亚洲成人福利网站| 成全影视免费观看大全二| 亚洲av最新在线观看网址| 免费看国产一级特黄aa大片| 特级毛片免费播放| 亚洲AV无码AV男人的天堂| 亚洲毛片免费观看| 亚洲久热无码av中文字幕| vvvv99日韩精品亚洲| 可以免费观看的毛片| 亚洲人成日本在线观看| 日本高清免费中文字幕不卡| 国产免费伦精品一区二区三区| 亚洲国产女人aaa毛片在线| 亚洲高清中文字幕免费| 国产精品亚洲综合网站| 亚洲女久久久噜噜噜熟女| 免费视频专区一国产盗摄| 免费的黄色的网站| 99人中文字幕亚洲区| 在线看片无码永久免费aⅴ| A毛片毛片看免费| 日韩亚洲不卡在线视频中文字幕在线观看 | 在线免费中文字幕| 亚洲依依成人亚洲社区| 国内精品99亚洲免费高清| 无码国产精品一区二区免费| 一区二区三区免费高清视频| 亚洲电影在线免费观看|