3 回答

TA貢獻1900條經驗 獲得超5個贊
默認情況下,從服務器加載的數據(JSON或XML數據)將保存在瀏覽器緩存中,但在下一個請求中不使用。原因是,默認情況下,jqGrid會實現ajax請求的相同行為,例如jQuery.ajax的cache:false參數。這意味著所有請求都有一個附加參數,例如timestamp。它使所有GET請求的URL唯一,因此本地保存的數據將不會使用兩次。因此,如果您希望jqGrid不使用本地瀏覽器緩存中的數據,則無需執行任何操作。ndnd=1286296925096
如果您要另外拒絕在本地保存數據(例如,出于安全原因或為了減少使用永遠不會使用的信息填充本地緩存),則可以在服務器響應的HTTP標頭中包含no-store指令。
如果確實要緩存服務器請求并使用數據,則應使用prmNames: { nd:null} jqGrid選項。然后,可以從本地瀏覽器緩存中獲取下一個請求的數據。如果這樣做,我建議您在服務器響應的HTTP標頭中包含Cache-Control指令,該指令強制使用所需的緩存行為。例如,我個人使用Cache-Control: max-age=0并使用ETag發送數據中的哈希值。因此,所有ajax請求都將發送到服務器以重新驗證本地緩存。所有請求將自動包含If-None-MatchHTTP標頭以及ETag來自本地緩存的數據。如果數據沒有更改,服務器可以響應HTTP/1.1 304 Not Modified沒有主體,而不是HTTP/1.1 200 OK擁有數據的主體。該響應HTTP/1.1 304 Not Modified允許瀏覽器使用本地緩存。
更新:我另外使用了Cache-Control: private關閉緩存代理上的數據并聲明可以緩存數據,但不能與其他用戶共享的功能。
如果您想了解有關HTTP標頭的緩存控制的更多信息,建議您閱讀以下“ 緩存教程”。

TA貢獻1796條經驗 獲得超4個贊
所以我建議Cache-Control: private, max-age=0
在服務器響應中設置HTTP標頭。另外,可以使用它prmNames: { nd: null }
來刪除絕對不需要的參數。這Cache-Control
是HTTP標準的一部分,所有Web瀏覽器都會向服務器發送新的Ajax請求,而不僅僅是從Web瀏覽器緩存中獲取先前的請求。這是最干凈的方法。
- 3 回答
- 0 關注
- 751 瀏覽
添加回答
舉報