jqGrid缓存网格数据

时间:2010-09-13 22:26:51

标签: jquery caching jqgrid

我有一个按钮onclick它应该转到另一个包含jqGrid的页面。但是如果用户想去看看它应该被缓存的数据并显示而不是调用服务器....表单值是默认情况下缓存但是jqGrid ...如何缓存它?

2 个答案:

答案 0 :(得分:1)

表单是HTML规范的一部分,jqGrid不是......为什么你希望缓存网格的数据呢?

也就是说,如果您使用GET url检索网格数据,某些浏览器(如IE)将缓存GET的结果。您需要使URL唯一(例如,通过附加时间戳)以防止数据被缓存。但请记住,这不会在所有浏览器中缓存数据。

答案 1 :(得分:1)

可以实现数据缓存,但这并不容易。您必须在服务器端定义一些基于所选caching strategy的HTTP头。例如,您可以使用“Cache-Control”HTTP标头的max-age,如

Cache-Control: max-age=60

表示服务器响应应在60秒内缓存在客户端上。如果您打算使用此方法,则必须定义jqGrid的其他参数prmNames:{nd:null},这将删除发送nd参数以及任何服务器请求中包含的时间戳。执行此步骤后,jqGrid使用的所有ajax请求将在时间间隔(60秒)内从本地缓存获取。

对于ETags(实体标签),可以实现服务器端缓存,其策略更复杂,作为固定的缓存时间。这是我最喜欢的策略,但其实现相对复杂(有关详细信息,请参阅Guidance on a better way to retain filtering options when using ASP.NET MVC 2Concurrency handling of Sql transactrion。)

如果您无法使用缓存数据的方式(由于某些原因),我会建议您选择以下两种变体:

  1. 在同一页面上创建网格 作为定义jqGrid参数的表单中的按钮和其他过滤器(请参阅How to filter the jqGrid data NOT using the built in search/filter box)。
  2. 使用与jQuery.Remove()jQuery.Empty()和新ajax请求相关的表单“重新绘制”页面。例如,jQuery("body").Empty()jQuery("div#main").Empty() <div id="main">位于正文顶部。然后,您可以使用jQuery("body").load("newPage.htm")jQuery("div#main").load("newPage.jsp")等电话填充页面正文(或id =“main”的div)。
  3. 这些替代方案的优势在于您将保持在同一页面,并且可以使用所有JavaScript数据。例如,如果网格使用“loadonce:true”参数,则可以从'data'参数中获取旧的jqGrid数据,然后使用数据值作为新jqGrid的'data'参数创建新的jqGrid。