從jQuery 1.5開始,ajax方法現在可以根據XMLHTTPRequest的W3C規範調用success()處理程序正確處理304個Not Modified響應。這允許您的應用程序將請求視爲成功,即使服務器實際上沒有返回任何數據(因爲您已經有最新的數據緩存)。適當的方式來處理304在jQuery中未修改ajax
對於正常(非高速緩存)GET請求時,成功處理程序被調用,以下ARGS:
- 數據:{來自服務器的數據}
- 狀態:OK
- jqXHR:
- 狀態:200
- 狀態文本:OK
- 的responseText:{從服務器的數據}
對於緩存的GET請求,成功處理程序調用以下ARGS:
- 數據:不確定
- 狀態:notmodified
- jqXHR:
- 狀態:304
- statusText:notmodified
- 的responseText:{從緩存中的數據}
(至少,這是它是如何在IOS 4.2返回,對於通過清單文件使用的應用程序緩存一個web應用程序。我假設這對大多數平臺/瀏覽器上的一般瀏覽器緩存是一致的)。
您可以看到,只有請求爲200 OK時才填充「data」參數;因爲jqXHR.responseText總是填充數據,而不管數據是來自服務器(200 OK)還是來自緩存(304 Not Modified)。
鑑於這種情況,在大多數GET請求中,您的成功處理程序將希望對您獲取的數據執行某些操作,而不管它來自何處,因此您的成功代碼似乎最適合始終使用jqXHR.responseText,而不是做這樣的事情:
if ("notmodified" === status) {
// do something with jqXHR.responseText
} else {
// do something with data
}
或者是有過的情況下,當jqXHR.responseText 不會在成功處理程序來填充,但數據精氨酸會?
我必須通過我的代碼庫並更改所有成功處理程序(以前我在jQuery 1.4.2上,它始終從緩存中返回數據);所以我只想確保我以正確的方式處理它。 (不要想到最後,然後意識到我應該以另一種方式做到這一點)。
我目前正在處理一個項目上的這個問題......有點令人驚訝的是,jQuery不會自動爲您填充數據參數。我不同意你的邏輯......我敢肯定,HTTP標準需要一個空的響應主體304未修改的響應,所以服務器不應該發回任何額外的數據......不應該有任何含糊不清。 – 2012-01-09 22:40:41
在我的情況下,jqXHR.responseText是未定義的,也有一個響應文本:( – drogon 2013-10-01 17:40:22