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

Jquery jqGrid服务器响应-不同的格式,但它可以工作。为什么?,jquery,jqgrid,Jquery,Jqgrid,我刚刚发现jqGrid将服务器响应格式定义为: { "total": "xxx", "page": "yyy", "records": "zzz", "rows" : [ {"id" :"1", "cell" :["cell11", "cell12", "cell13"]}, {"id" :"2", "cell":["cell21", "cell22", "cell23"]}, ... ] } 如果我的服务器响应属性不是jqGrid默认值,

我刚刚发现jqGrid将服务器响应格式定义为:

{ 
  "total": "xxx", 
  "page": "yyy", 
  "records": "zzz",
  "rows" : [
    {"id" :"1", "cell" :["cell11", "cell12", "cell13"]},
    {"id" :"2", "cell":["cell21", "cell22", "cell23"]},
      ...
  ]
}
如果我的服务器响应属性不是jqGrid默认值,我应该使用json阅读器来映射属性

但我的服务器响应与此完全不同,但插件仍然可以工作。JSON中没有“行”或“页”属性。并正确显示总记录。我的服务器响应示例:

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


非常感谢。

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

jsonReader:{
重复项:false,
根:函数(obj){return obj;},
第页:函数(){return 1;},
总计:函数(){return 1;},
记录:函数(obj){return obj.length;}
}
稍后在介绍
loadonce:true
功能之后,第二种输入格式(具有命名属性的项数组)的使用变得更加常见。第一种数据格式是指服务器端对数据进行分页、排序和过滤/搜索。服务器应该只返回一页数据,并使用
total
参数通知jqGrid总页数。如果使用
loadonce:true
服务器必须立即返回所有数据。如果响应包含
总计
页面
记录
属性,则这些属性将被忽略,jqGrid将根据返回的数据数组计算值


使用错误的输入数据格式或使用与输入数据不对应的
jsonReader
的错误属性导致了很多错误。我的想法是修改jqGrid的代码,以检测并根据输入数据的格式修复
jsonReader
的绝对错误选项。我把我的建议作为pull请求发布到jqGrid的主代码中。因此,从4.4.5版开始(请参阅)
jsonReader
在大多数情况下不能使用。由于该功能,jqGrid可以读取这两种输入格式,而无需指定任何额外的
jsonReader
选项。

谢谢您的时间,@Oleg。但让我看看我是否正确:不可能使用服务器端分页加上项目数组?我们有数千条记录,因此对服务器数据进行分段是合理的。此外,我们无法将服务器响应更改为jqGrid的更友好格式。@darksoulsong:几乎所有事情都是可能的。您只需设置足够大的
total
值,该值在
jsonReader
中定义为函数。在这种情况下,将启用寻呼机的“下一页”按钮,用户可以转到下一页。