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 关注
- 718 浏览
添加回答
举报