猿问

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

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


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


这些问题的答案会根据您是否正在使用而改变loadOnce吗?


慕村9548890
浏览 719回答 3
3回答

梵蒂冈之花

默认情况下,从服务器加载的数据(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标头的缓存控制的更多信息,建议您阅读以下“ 缓存教程”。

沧海一幻觉

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

SMILET

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

相关分类

JQuery
我要回答