为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕村9548890 2019-11-20 12:52:29
jqGrid是否在文件系统上存储网格数据?如果是这样,您是否需要清除浏览器的缓存以将其删除?还是只是通过JavaScript(和浏览器)将其存储在内存中?只是关闭浏览器会删除数据吗?这些问题的答案会根据您是否正在使用而改变loadOnce吗?
查看完整描述

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标头的缓存控制的更多信息,建议您阅读以下“ 缓存教程”。


查看完整回答
反对 回复 2019-11-20
?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

我不明白“如果不使用HTTP标头该怎么办?”这一说法。每个开始的URL http://...将使用HTTP协议加载相应的HTML页面。您可以使用IE / Chrome的Fiddler或Developer Tools(按F12键启动并进入“网络”标签)进行网络跟踪(确切地说是HTTP跟踪)。如果使用prmNames: { nd: null }mtype: "GET"则Internet Explorer(尤其是旧版本)可能会出现问题,因为它会缓存旧请求,并且不会向服务器发送新请求。

查看完整回答
反对 回复 2019-11-20
?
SMILET

TA贡献1796条经验 获得超4个赞

所以我建议Cache-Control: private, max-age=0在服务器响应中设置HTTP标头。另外,可以使用它prmNames: { nd: null }来删除绝对不需要的参数。这Cache-Control是HTTP标准的一部分,所有Web浏览器都会向服务器发送新的Ajax请求,而不仅仅是从Web浏览器缓存中获取先前的请求。这是最干净的方法。

查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 718 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信