我刚刚发现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"},
...
]
怎么回事?
非常感谢。
答案 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
,服务器必须立即返回所有数据。如果响应包含total
,page
和records
属性,则属性将被忽略,并且jqGrid将根据返回数据的数组计算值。
使用错误的输入数据格式或使用jsonReader
的错误属性时出现了很多错误,这些属性与输入数据不对应。我有想法根据输入数据的格式将jqGrid的代码修改为检测并修复明确错误的jsonReader
选项。我将我的建议作为拉取请求发布,除了merged以及jqGrid的主要代码。因此,在大多数情况下,不能使用从版本4.4.5开始(请参阅here)jsonReader
。由于该功能,jqGrid可以读取两种输入格式,而无需指定任何其他jsonReader
选项。