2013-10-17 37 views
0

當我在javascript中使用GET請求獲取頁面時,瀏覽器緩存它的方式與我點擊鏈接或在地址欄中輸入時的方式相同嗎?瀏覽器緩存是否意識到javascript xmlhttp請求?

如果沒有,因爲我已經提取了頁面,是否有一種方法可以將它(以編程方式)添加到瀏覽器緩存中?

+0

[防止AJAX調用緩存]的可能重複(http://stackoverflow.com/questions/367786/prevent-caching-of-ajax-call)。這基本上回答你的問題imho。強制緩存的唯一方法是發送正確的頭文件(一些限制/瀏覽器差異,例如由於SSL應用程序引起的差異)。 – nietonfir

+0

@nietonfir - 我不認爲關於防止緩存的questino/answer是嘗試強制緩存的重複。他們是不同的問題,需要不同的答案。 – jfriend00

+0

@ jfriend00我(顯然)不同意。 OP詢問瀏覽器是否緩存XmlHttp請求,並由dup解決。但在仔細閱讀[幫助頁面](http://stackoverflow.com/help/duplicates)後,我必須承認,我的旗幟有點匆忙。很好回答btw。 – nietonfir

回答

0

當瀏覽器提取網頁時,它也使用GET請求。有可能所有GET請求都通過瀏覽器中的相同緩存機制,儘管沒有規範說明如何正常工作。

除了僅僅請求資源並讓瀏覽器的緩存執行正常的操作之外,沒有一種方法可以將某些內容添加到瀏覽器自己的緩存中。如果您想知道所有常見的瀏覽器是否會以這種方式緩存它,那麼您需要確保服務器端的標頭設置已被適當地設置(以允許它被緩存),然後測試每個瀏覽器以確保它被緩存你要。

如果您留在同一頁面中,並且希望確保某些內容不會在同一頁面中多次請求,那麼您可以在該頁面的JavaScript代碼中實現自己的緩存。您只需在第一次請求時將結果存儲在JavaScript變量中,然後您實現的用於獲取此資源的函數僅檢查您自己的本地存儲對象,以查看資源是否已存在。如果不是,則通過GET請求並保存結果。你可以製作一個簡單的版本,它被硬編碼到一個特定的資源或一個更通用的版本,它保存了URL和結果以及一個時間戳,並實現了更多的典型緩存行爲。

如果您希望它跨頁面緩存,並且您的測試發現內置瀏覽器緩存不足,則可以使用本地存儲來存儲數據(可能帶有時間戳),然後只檢查本地存儲之前請求一個GET請求。