jqGrid服务器响应 - 格式不同,但它的工作原理。为什么?

时间:2014-10-30 18:53:53

标签: jquery jqgrid

我刚刚发现jqGrid将服务器响应格式判断为:

{ 
  "total": "xxx", 
  "page": "yyy", 
  "records": "zzz",
  "rows" : [
    {"id" :"1", "cell" :["cell11", "cell12", "cell13"]},
    {"id" :"2", "cell":["cell21", "cell22", "cell23"]},
      ...
  ]
}

我应该使用json reader来映射属性,以防我的服务器响应属性不是jqGrid默认值。

但我的服务器响应与插件的工作方式完全不同。没有"行"或者"页面"我们的JSON中的属性。并且正确显示总记录。我的服务器响应示例:

[
    {"id":1,"price":3.99,"title":"Foo"},
    {"id":2,"price":3.99,"title":"Bar"},
    ...
]

怎么回事?

非常感谢。

1 个答案:

答案 0 :(得分:1)

这是绝对正确的问题!输入数据的第一种格式是支持最旧版本的jqGrid的输入格式。为了能够读取第二种格式(项目数组),必须使用jqGrid的棘手和早期不太知名的jsonReader特性,其中jsonReader的属性将被定义为函数。可以使用以下jsonReader

jsonReader: {
    repeatitems: false,
    root: function (obj) { return obj; },
    page: function () { return 1; },
    total: function () { return 1; },
    records: function (obj) { return obj.length; }
}

在介绍loadonce: true功能之后,第二种输入格式(具有命名属性的项目数组)的使用变得更加常见。第一种数据格式意味着服务器端分页,排序和过滤/搜索数据。服务器应仅返回一页数据,并使用total参数通知jqGrid有关页面总数的信息。如果使用loadonce: true,服务器必须立即返回所有数据。如果响应包含totalpagerecords属性,则属性将被忽略,并且jqGrid将根据返回数据的数组计算值。

使用错误的输入数据格式或使用jsonReader的错误属性时出现了很多错误,这些属性与输入数据不对应。我有想法根据输入数据的格式将jqGrid的代码修改为检测并修复明确错误的jsonReader选项。我将我的建议作为拉取请求发布,除了merged以及jqGrid的主要代码。因此,在大多数情况下,不能使用从版本4.4.5开始(请参阅herejsonReader。由于该功能,jqGrid可以读取两种输入格式,而无需指定任何其他jsonReader选项。