2012-06-15 51 views
7

我在Chrome 19中遇到了一個奇怪的錯誤。我通過pushState支持實現了一個完整的AJAX網站(通過AJAX請求打開每個非外部鏈接)。我通過JSON格式在AJAX中傳輸HTML片段。Chrome中的Ajax + pushState錯誤

當我通過外部鏈接離開我的網站,然後返回時,Chrome爲該網址呈現緩存的數據 - 問題在於,他緩存了JSON內容並顯示出來,而不是完整的網頁。

這是這些步驟可重複(更新:我在我的網站上移除AJAX功能從那時起,所以這個bug並不再出現):

  1. 打開http://beta.mirtes.cz/
  2. 單擊第二個日期鏈接(16. 6. 2012旁邊的「這一切始於一個奇怪的電子郵件」)。此頁面(您現在位於http://beta.mirtes.cz/it-all-began-with-a-strange-e-mail)通過AJAX加載。
  3. 點擊「這一切都開始於一個奇怪的電子郵件」。你被重定向到一個外部網站。
  4. 頁面完全加載後,在Chrome中點擊「返回」。

我嘗試使用Cache-Control發送所有AJAX響應:no-cache,但沒有任何效果。

Firefox 12正常工作。

回答

7

我帶了一個解決方法 - 我用附加的虛擬GET參數執行AJAX請求 - ?ajax = 1。這樣瀏覽器就可以識別通常的HTML內容和JSON之間的區別。它對用戶沒有任何影響,該參數僅在Firebug中可見。

+0

你能解釋一下你做了什麼以及它是如何解決問題的? – Ryan

+0

我使用額外的GET參數進行所有AJAX請求 - 在這種情況下,ajax = 1。該參數對用戶是不可見的,因爲它只在後臺執行。 –

+0

這樣,瀏覽器就可以知道完整的HTML內容和JSON AJAX內容之間的區別,因爲這些URL是不同的。因此它不會顯示緩存的JSON內容。你可以在我的主頁上查看功能http://ondrej.mirtes.cz/。 –