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

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

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

根据您是否使用loadOnce ,这些问题的答案是否会发生变化?

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

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

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

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

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