jqGrid数据存储在浏览器缓存中?

时间:2010-10-07 20:34:14

标签: jquery jqgrid privacy

jqGrid是否在文件系统上存储网格数据?如果是这样,您是否需要清除浏览器的缓存以将其删除?

或者它只是通过JavaScript(和浏览器)存储在内存中?只关闭浏览器会删除数据吗?

这些问题的答案会根据您使用loadOnce吗?

而改变

1 个答案:

答案 0 :(得分:4)

默认情况下,从服务器加载的数据(JSON或XML数据)将保存在浏览器缓存中,但在下次请求时不会使用。原因是每个默认的jqGrid实现了cache:false的{​​{1}}参数之类的ajax请求的相同行为。这意味着所有请求都有一个额外的参数nd,如nd=1286296925096,这是时间戳。它使所有GET请求的URL唯一,因此本地保存的数据将不会使用两次。所以如果您希望jqGrid不使用本地浏览器缓存中的数据,则无需执行任何操作

如果您想要另外拒绝在本地保存数据(例如由于安全原因或减少使用从未使用过的信息填充本地缓存),您可以在HTTP标头中包含jQuery.ajax指令。服务器响应。

如果您确实要缓存服务器请求并使用数据,则应prmNames: { nd:null} no-store。然后,来自下一个请求的数据可以从本地浏览器缓存中获取。如果你这样做,我建议你在服务器响应的HTTP头中包含强制使用你需要的缓存行为的jqGrid option指令。例如,我使用个人Cache-Control: max-age=0并使用ETag来发送数据的哈希值。因此,所有ajax请求将被发送到服务器重新验证本地缓存。所有请求将自动包含If-None-Match HTTP标头以及来自本地缓存的ETag数据。如果数据未更改,则服务器可以使用没有正文的响应HTTP/1.1 304 Not Modified来回答,而不是HTTP/1.1 200 OK,而正文具有数据。响应HTTP/1.1 304 Not Modified允许浏览器使用本地缓存。

更新:我另外使用Cache-Control: private关闭缓存代理上的数据,并声明数据可以缓存,但不与其他用户共享。

如果您想了解有关HTTP标头的缓存控制的更多信息,我建议您阅读以下Cache-Control