在gridComplete方法中获取自定义JQGrid JSON数据

时间:2011-09-01 15:05:42

标签: json jqgrid customization

以下是典型的JQGrid JSON响应:

{
  "page":1,
  "records":537,
  "rows":[..],
  "rowCount":10,
  "total":54
}

除此之外,我还想发送其他自定义数据。例如,我想发送最后一次搜索的数据库时间,以便在此后发生更改时我可以延迟重新加载网格。以下是我希望发送该数据的方式:

{
  //Custom name-value pairs:
  "nameValues":{"lastSearchTime":"2011/09/01:14:14:56"},

  //Normal JSON data:
  "page":1,
  "records":537,
  "rows":[..],
  "rowCount":10,
  "total":54
}

问题是JQGrid吞并了JSON响应而不是将其转发到gridComplete方法。换句话说,params在以下函数中未定义:

function myGridComplete (params){
   //params is undefined!

   var JSONResponse = ?;//I need your help here!!!

   globalGridVariables.lastSearchTime = JSONResponse.nameValues.lastSearchTime;

   //Rest of grid complete method
   ..
}

如果有办法在gridComplete方法中访问JSON响应对象,或者是否有另一种支持的方法可以将自定义数据添加到JSON响应中,请告诉我。

非常感谢!

注意:我不想将其作为隐藏列发送,因为这样效率很低。

2 个答案:

答案 0 :(得分:4)

您可以使用loadComplete代替gridCompleteloadComplete事件有一个参数(例如data),表示服务器响应的完整数据,包括所有扩展名。

您也可以将nameValues重命名为userdata,然后使用$('#list').jqGrid('getGridParam', 'userData')获取值。有关详细信息,请参阅here

此外,您可以考虑使用更多HTTP caching(请参阅herehere)了解您在问题中描述的目标。

答案 1 :(得分:1)

您可以使用具有反序列化响应的beforeProcessing并在gridComplete和loadComplete之前激活。

例如:

beforeProcessing: function (data, status, xhr) {
                            myArray = data.rows;
                        }

只是为了让文档更清晰:

以下是发出ajax请求时事件的执行顺序

  1. beforeRequest
  2. loadBeforeSend
  3. serializeGridData
  4. loadError
  5. beforeProcessing
  6. gridComplete
  7. loadComplete