2012-06-30 58 views
2

我在使用history.js時遇到了一些問題。使用Ajax服務器響應的History.js

我嘗試使用history.js + ajax和dojotoolkit實現github一樣的源代碼瀏覽器。

它的工作原理,但我得到了在服務器端

我用PHP的一個小問題,當與history.js pushState的某個頁面負載,服務器會首先檢查請求類型,「是阿賈克斯? 」。如果它是ajax,那麼服務器將只返回頁面的請求部分,如果它不是服務器將返回整頁。

問題是,如果我關閉瀏覽器,然後重新打開它,頁面將只顯示服務器返回的ajax頁面,而不是整頁,因爲它仍然稱爲ajax請求。

我該如何解決這個問題?

+0

服務器如何知道它是一個Ajax請求?在重新打開瀏覽器之後,所有服務器都應該有地址欄中的網址。常見的事情是檢查頭文件'X-REQUESTED-WITH'的值是否爲「xmlhttprequest」 - 如果這是服務器正在做的事情,那麼不應該有問題。 – jgivoni

回答

1

我有完全相同的問題,並花了一些時間研究它。當你從歷史記錄中恢復標籤或返回到不同頁面的頁面時,原始頁面通常從瀏覽器緩存中恢復(最初我認爲它向服務器發送的請求完全相同,包括標題)。

如果您最後一次對網址的請求是AJAX,並且狀態已被推送,那麼AJAX響應正在瀏覽器中緩存 - 之後緩存的響應會顯示給您。

解決方法是通過發送適當的標頭來禁用AJAX請求的緩存。這是我在PHP中使用,以確保沒有瀏覽器會緩存我的迴應:

header("Expires: Sun, 19 Nov 1978 05:00:00 GMT"); 
header("Cache-Control: no-store, no-cache, must-revalidate"); 
header("Pragma: no-cache");