2013-07-10 48 views
24
xmlhttp.onreadystatechange = function() 
{ 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
    { 
     document.getElementById("myDiv").innerHTML = xmlhttp.responseText; 
    } 
} 

上面的代碼來自:http://www.w3schools.com/ajax/ajax_xmlhttprequest_onreadystatechange.aspreadyState vs status == 200

問:

根據本教程:

readyState: 4: request finished and response is ready 

status: 200: "OK" 

When readyState is 4 and status is 200, the response is ready: 

自當xmlhttp.readyState == 4,響應準備好了,爲什麼我們還需要xmlhttp.status == 200xmlhttp.readyState == 4xmlhttp.status == 200有什麼區別?

回答

25

響應的狀態xhr.status(通常)用於確定請求是否成功。 xhr.readyState僅用於確定請求的狀態,如「尚未發送」(0),「已完成並收到響應」(4)等。

服務器負責提供status,而用戶代理提供了readyState

+0

正是我所需要的! –

1

考慮你的服務器端代碼有錯誤。您請求該頁面,並且當服務器完成響應流式傳輸時,readyState將爲4,但狀態代碼將爲500(或500)。

0

readyState引用了請求的響應 - 當您完成檢索響應並且需要查看某個內容時,它是4。實際值仍未知,因此您需要檢查已返回的status

14

狀態表示服務器響應是否正常。
在一般的話,當你有一個狀態

500 - 599:服務器出現錯誤

400 - 499:這是一個客戶端錯誤(例:404頁未找到)

300 - 399:然後存在一個重定向

200 - 299:那麼它是正確的,

100 - 199:意味着信息消息

則狀態== 200就是得到你的消息,其中服務器說:「嗨,哥們我做的工作!」

+0

感謝它真的幫了 –

+0

'嘿,我做了這份工作!呵呵呵,就像那個解釋 – samer

14

我的比喻:揹着病人的救護車去一個hospital.In這種情況下的家庭(客戶端)和醫院(服務器)需要保持的兩件事情

  • 救護車順利到達醫院軌道(readyState
  • 病人在此過程中的健康更新。(status

如果readyState === 4status === 200,表示一切都right.In以同樣的方式Ajax調用的作品。

+0

感謝它真的幫助 –

9

readyState保存XMLHttpRequest的狀態。從0到4的變化:

0:請求未初始化

1:服務器連接建立

2:請求接收

3:處理請求

4:請求完成並且響應已準備好 狀態200:「確定」 404:找不到頁面

+0

感謝它真的幫助 –

0

onreadystatechange = function()僅在我們從服務器獲得響應時才執行。 如果我們從服務器獲得響應意味着我們的請求已完成,由4表示。並且200告訴我們它的狀態是正確的。 「4:請求已完成,響應已準備就緒狀態200」 如果找不到頁面,我們將獲得狀態404。

相關問題