解决方法
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 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”>在身体的某个部位.然后你可以用jQuery(“body”).load(“newPage.htm”)或jQuery(“div#main”)这样的调用来填充页面体(或id为“main”的div).load(“newPage” .JSP“).
这些替代方案的优点是您将保持在同一页面上,并且可以使用所有JavaScript数据.例如,如果网格使用“loadonce:true”参数,则可以从’data’参数中获取旧的jqGrid数据,然后使用数据值作为新jqGrid的’data’参数创建新的jqGrid.