首頁 web前端 js教程 javascript ajax的5種狀態介紹_基礎知識

javascript ajax的5種狀態介紹_基礎知識

May 16, 2016 pm 04:39 PM
ajax javascript 狀態

在《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 (未初始化): (xml(標準化越來越近了)HttpRequest)物件已經創建,但還沒有呼叫open()方法。
1 (載入):已經呼叫open() 方法,但尚未傳送請求。
2 (載入完成): 請求已發送完成。
3 (交互):可以接收到部分回應資料。
4 (完成):已經接收到了全部數據,並且連接已經關閉。

在《Understanding ajax(動態網站靜態化): Using JavaScript to Create Rich Internet Applications》中,則用下表進行了說明:

readyState Status Code
Status of the xml(標準化越來越近了)HttpRequest Object
(0) UNINITIALIZED
未初始化 The object has been created but not initialized. (The open method has not been called.)
(xml(標準化越來越近了)HttpRequest)物件已經創建,但尚未初始化(還沒有呼叫open方法)。
(1) LOADING
載入 The object has been created, but the send method has not been called.
(xml(標準化越來越近了)HttpRequest)物件已經創建,但尚未呼叫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)未初始化
此階段確認xml(標準化越來越近了)HttpRequest物件是否創建,並為呼叫open()方法進行未初始化作好準備。值為0表示物件已經存在,否則瀏覽器會報錯-物件不存在。

(1)載入
此階段對xml(標準化越來越近了)HttpRequest物件進行初始化,即呼叫open()方法,根據參數(method,url,true)完成物件狀態的設定。並呼叫send()方法開始向服務端發送請求。值為1表示正在傳送請求至服務端。

(2)載入完成
此階段接收伺服器端的回應資料。但獲得的還只是服務端回應的原始數據,並不能直接在客戶端使用。值為2表示已接收完全部響應資料。並為下一階段對資料解析作好準備。

(3)交互
此階段解析接收到的伺服器端回應資料。即根據伺服器端回應頭部回傳的MIME類型把資料轉換成能透過responseBody、responseText或responsexml(標準化越來越近了)屬性存取的格式,為在客戶端調用作好準備。狀態3表示正在解析資料。

(4)完成
此階段確認全部資料都已解析為客戶端可用的格式,解析已完成。值為4表示資料解析完畢,可以透過xml(標準化越來越近了)HttpRequest物件的對應屬性取得資料。

概而括之,整個xml(標準化越來越近了)HttpRequest物件的生命週期應該包含以下階段:
創建-初始化請求-發送請求-接收資料-解析資料-完成

在具體應用中,明確了readyState的五個狀態(xml(標準化越來越近了)HttpRequest對象的生命週期各個階段)的含義,就可以消除對ajax(動態網站靜態化)核心的神秘感(語焉不詳的背後要嘛是故弄玄虛,製造神秘感;要嘛就是「以其昏昏,使人昭昭」),迅速把握其實質,對減少學習中的挫折感和增強自信心都極為有益。

例如,透過如下範例:

複製程式碼 程式碼如下:

//宣告數組
var states = [「正在初始化…」,
「正在初始化請求…成功!
正在發送請求…”,
「成功!
正在接收資料…”,
「完成!
正在解析資料…”,
「完成!
”];

//回呼函數內部程式碼片段
if (xml(標準化越來越近了)Http.readyState==4)
{
var span = document.createElement(“span”);
span.innerHTML = states[xml(標準化越來越近了)Http.readyState];
document.body.appendChild(span);

if (xml(標準化越來越近了)Http.status == 200)
{
var xml(標準化越來越近了)doc = xml(標準化越來越近了)Http.responsexml(標準化越來越近了);
//其他程式碼
}

//別忘記銷毀,防止記憶體洩漏
xml(標準化越來越近了)Http = null;
}else{
var span = document.createElement(“span”);
span.innerHTML = states[xml(標準化越來越近了)Http.readyState];
document.body.appendChild(span);
}結果如下:

正在初始化請求…成功!
正在發送請求…成功!
正在接收資料…完成!
正在解析資料…完成!


我們很容易明白xml(標準化越來越近了)HttpRequest物件在各個階段都在做什麼。因此,也就很容易對ajax(動態網站靜態化)的核心部分有一個真正簡單明了的理解。
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
處於待機狀態的連線狀態:已斷開,原因:NIC合規性 處於待機狀態的連線狀態:已斷開,原因:NIC合規性 Feb 19, 2024 pm 03:15 PM

「事件日誌訊息中的連接狀態顯示為待機狀態:已斷開連接,原因是符合NIC標準。這表示系統在待機模式下,網路介面卡(NIC)已斷開連接。雖然這通常是網路問題,但也可能由軟體和硬體衝突引起。在接下來的討論中,我們將探討如何解決這個問題。」待機連接斷開的原因是什麼? NIC合規性?如果在Windows事件檢視器中發現「ConnectivityStatusinStandby:DisConnected,Reason:NICCompliance」訊息,這表示您的NIC或網路介面控制器可能有問題。這種情況通常

陌陌狀態怎麼設定 陌陌狀態怎麼設定 Mar 01, 2024 pm 12:10 PM

陌陌這款廣為人知的社群平台,為用戶的日常社交提供了豐富的功能服務。在陌陌上,用戶可以輕鬆分享生活狀態、結交朋友、進行聊天等。其中設定狀態功能讓使用者能夠向其他展示自己當前的心情和狀態,進而吸引更多人的注意和交流。那麼究竟該如何設定自己的陌陌狀態呢,以下就為大家帶來詳細的內容介紹!陌陌怎麼設定狀態? 1.打開陌陌,點擊右下角更多,找到並點擊每日狀態。 2、選擇狀態。 3、即可顯示設定的狀態。

PHP 與 Ajax:建立一個自動完成建議引擎 PHP 與 Ajax:建立一個自動完成建議引擎 Jun 02, 2024 pm 08:39 PM

使用PHP和Ajax建置自動完成建議引擎:伺服器端腳本:處理Ajax請求並傳回建議(autocomplete.php)。客戶端腳本:發送Ajax請求並顯示建議(autocomplete.js)。實戰案例:在HTML頁面中包含腳本並指定search-input元素識別碼。

解決jQuery AJAX請求遇到403錯誤的方法 解決jQuery AJAX請求遇到403錯誤的方法 Feb 20, 2024 am 10:07 AM

標題:解決jQueryAJAX請求出現403錯誤的方法及程式碼範例403錯誤是指伺服器禁止存取資源的請求,通常會導致出現這個錯誤的原因是請求缺少權限或被伺服器拒絕。在進行jQueryAJAX請求時,有時會遇到這種情況,本文將介紹如何解決這個問題,並提供程式碼範例。解決方法:檢查權限:首先要確保請求的URL位址是正確的,同時驗證是否有足夠的權限來存取該資

解決jQuery AJAX請求403錯誤的方法 解決jQuery AJAX請求403錯誤的方法 Feb 19, 2024 pm 05:55 PM

jQuery是一個受歡迎的JavaScript函式庫,用來簡化客戶端端的開發。而AJAX則是在不重新載入整個網頁的情況下,透過發送非同步請求和與伺服器互動的技術。然而在使用jQuery進行AJAX請求時,有時會遇到403錯誤。 403錯誤通常是伺服器禁止存取的錯誤,可能是由於安全性原則或權限問題導致的。在本文中,我們將討論如何解決jQueryAJAX請求遭遇403錯誤

如何解決jQuery AJAX報錯403的問題? 如何解決jQuery AJAX報錯403的問題? Feb 23, 2024 pm 04:27 PM

如何解決jQueryAJAX報錯403的問題?在開發網頁應用程式時,經常會使用jQuery來發送非同步請求。然而,有時在使用jQueryAJAX時可能會遇到錯誤代碼403,表示伺服器禁止存取。這種情況通常是由伺服器端的安全性設定所導致的,但可以透過一些方法來解決這個問題。本文將介紹如何解決jQueryAJAX報錯403的問題,並提供具體的程式碼範例。一、使

Java執行緒的五種狀態詳解及狀態轉換規則 Java執行緒的五種狀態詳解及狀態轉換規則 Feb 19, 2024 pm 05:03 PM

深入了解Java執行緒的五種狀態及其轉換規則一、執行緒的五種狀態介紹在Java中,執行緒的生命週期可以分為五個不同的狀態,包括新狀態(NEW)、就緒狀態(RUNNABLE)、運作狀態(RUNNING)、阻塞狀態(BLOCKED)和終止狀態(TERMINATED)。新建狀態(NEW):當執行緒物件建立後,它就處於新建狀態。此時,線程物件已經分配了足夠的資源來執行任務

如何使用Ajax從PHP方法取得變數? 如何使用Ajax從PHP方法取得變數? Mar 09, 2024 pm 05:36 PM

使用Ajax從PHP方法取得變數是Web開發中常見的場景,透過Ajax可以實作頁面無需刷新即可動態取得資料。在本文中,將介紹如何使用Ajax從PHP方法中取得變量,並提供具體的程式碼範例。首先,我們需要寫一個PHP檔案來處理Ajax請求,並傳回所需的變數。下面是一個簡單的PHP檔案getData.php的範例程式碼:

See all articles