我正在使用jqGrid 3.6.4和jquery 1.4.2。在我的示例中,我正在遵循json数据格式,我想将这些json数据映射到jqgrid的行中
{ "page": "1", "total": 1, "records": "6", "rows": [ { "head": { "student_name": "Mr S. Jack ", "year": 2007 }, "sub": [ { "course_description": "Math ", "date": "22-04-2010", "number": 1, "time_of_add": "2:00", "day": "today" } ] } ] }
我的jqgrid代码如下
jQuery("#"+subgrid_table_id).jqGrid({ url:"http://localhost/stud/beta/web/GetStud.php?sid="+sid, dtatype: "json", colNames: ['Stud Name','Year','Date'.'Number'], colModel: [ {name:'Stud Name',index:'student_name', width:100, jsonmap:"student_name"}, {name:'Year',index:'year', width:100, jsonmap:"year"}, {name:'Date',index:'date', width:100, jsonmap:"date"}, {name:'Number',index:'number', width:100, jsonmap:"number"} ], height:'100%', jsonReader: { repeatitems : false, root:"head" }, });
所以现在的问题是因为我的数据(即student_name和year)在“ head”下,因此jqgrid可以找到这两个字段。同时其他两个列值,即“日期”和“数字”位于“ sub”下,即使是那些列,我也无法使用jqgrid进行映射
所以请帮助我如何在JQGrid中定位这些属性。
谢谢
首先,发布的代码有一些错误,例如dtatype: "json"而不是datatype: "json"。用“ },});”代替“ }});”在代码末尾和colNames: ['Stud Name','Year','Date'.'Number']代替colNames: ['Stud Name','Year','Date','Number']。修复此明显的错误后,您需要更改jsonmap值。这是您的主要问题。固定代码如下所示:
dtatype: "json"
datatype: "json"
},});
}});
colNames: ['Stud Name','Year','Date'.'Number']
colNames: ['Stud Name','Year','Date','Number']
jsonmap
jQuery("#"+subgrid_table_id).jqGrid({ ... datatype: 'json', colNames: ['Stud Name','Year','Date'.'Number'], colModel: [ {name:'student_name', width:100, jsonmap:"head.student_name"}, {name:'year', width:100, jsonmap:"head.year"}, {name:'date', width:100, jsonmap:"sub.0.date"}, {name:'number', width:100, jsonmap:"sub.0.number"} ], jsonReader: { repeatitems:false, root:"rows" } });
您必须修复root为“ rows”并jsonmap以 JSON点表示法使用 (请参阅http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_dot_notation)。我使用了一种奇怪的表示法,如“ sub.0.number”,因为sub.0.number在JavaScript中它与sub[0].number。现在可以使用了。
root
rows
sub.0.number
sub[0].number
我建议您再考虑一下收到的JSON数据的结构。(请参阅我之前对您的评论):“ sub”元素确实是一个始终只有一个元素的数组,还是您想使用子网格?可能应该将数据从更改sub:[{"":"", ...}]为sub:{"":"", ...}?您想用作行标识符吗?student_name?然后将其添加id: "head.student_name"到jsonReader定义或将key: true属性添加到列的定义student_name。还是忘记了将其包含在JSON数据中?
sub:[{"":"", ...}]
sub:{"":"", ...}
student_name
id: "head.student_name"
jsonReader
key: true
还有最后一个建议。如果打开http://trirand.com/blog/jqgrid/jqgrid.html并在树的左侧打开分支“数据映射” \“数据优化”,您将看到一个仅使用数组而不是命名的示例JSON中的元素。这样的数据将具有最小的大小,并且可以更快地从服务器传输到客户端。相反,您的数据具有一些根本不用的字段(例如“ course_description ”)。因此, 如果可以在服务器 代码中 进行任何更改,请 尝试优化数据传输速率。