我有一个单击按钮,它应该转到包含 jqGrid 的另一个页面..但是如果用户想要查看数据,则应该缓存并显示数据,而不是调用服务器....表单值是默认缓存,但是 jqGrid ...如何缓存它?
最佳答案
数据的缓存可以实现,但是并不容易。您必须在服务器端定义一些基于 caching strategy 的 HTTP header 选择了。例如,您可以使用 max-age “Cache-Control”HTTP header 的类似
Cache-Control: max-age=60
这意味着服务器响应应在客户端上缓存 60 秒。如果您打算使用它,则必须定义附加参数 prmNames:{nd:null}
jqGrid 的,这将删除 nd
的发送参数以及任何服务器请求中包含的时间戳。完成此步骤后,jqGrid 使用的所有 ajax 请求都将在时间间隔(60 秒)内从本地缓存获取。
对于 ETags 来说,可以使用更复杂的策略实现服务器端缓存,因为固定的缓存时间是可能的。 (实体标签)。这是我最喜欢的策略,但其实现相对复杂(详细信息请参见 Guidance on a better way to retain filtering options when using ASP.NET MVC 2 和 Concurrency handling of Sql transactrion)。
如果您无法使用数据缓存方式(由于某些原因),我建议您使用以下两种变体作为替代方案:
- 在同一页面上创建网格,作为定义 jqGrid 参数的表单中的按钮和其他过滤器(请参阅 How to filter the jqGrid data NOT using the built in search/filter box )。
- 使用
jQuery.Remove()
的表单“重新绘制”页面或jQuery.Empty()
和新的ajax
要求。例如jQuery("body").Empty()
或jQuery("div#main").Empty()
哪里<div id="main">
位于 body 顶部的某处。然后您可以使用jQuery("body").load("newPage.htm")
之类的调用填充页面主体(或 id="main"的 div)或jQuery("div#main").load("newPage.jsp")
.
这些替代方案的优点是您将停留在同一页面并且可以使用所有 JavaScript 数据。例如,如果您的网格使用“loadonce:true”参数,您可以从“data”参数获取旧的 jqGrid 数据,然后使用该数据值作为新 jqGrid 的“data”参数创建新的 jqGrid。
关于jquery - jqGrid 缓存网格数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3704886/