jqGrid 是否在文件系统上存储网格数据?如果是这样,您是否需要清除浏览器的缓存才能将其删除?
还是它只是通过 JavaScript(和浏览器)存储在内存中?只是关闭浏览器会删除数据吗?
这些问题的答案是否会根据您是否使用而改变loadOnce
?
默认情况下,从服务器加载的数据(JSON 或 XML 数据)将保存在浏览器缓存中,但不会在下一次请求时使用。原因是每个默认的 jqGrid 都实现了 ajax 请求的相同行为,例如jQuery.ajaxcache:false
的参数。这意味着所有请求都有一个附加参数,例如时间戳。它使所有 GET 请求的 URL 唯一,因此本地保存的数据不会被使用两次。因此,如果您希望 jqGrid 不使用本地浏览器缓存中的数据,您无需执行任何操作。nd
nd=1286296925096
如果您还想拒绝在本地保存数据(例如,出于安全原因或减少使用永远不会使用的信息填充本地缓存),您可以在服务器响应的 HTTP 标头中包含no-store指令。
如果你确实想缓存服务器请求并使用你应该使用prmNames: { nd:null}
jqGrid 选项的数据。然后可以从本地浏览器缓存中获取来自下一个请求的数据。如果您这样做,我建议您在服务器响应的 HTTP 标头中包含Cache-Control指令,该指令强制使用您需要的缓存行为。例如,我个人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 标头的缓存控制的更多信息,我建议您阅读以下缓存教程。