2010-04-22 90 views
7

我正在使用jqGrid 3.6.4和jquery 1.4.2。我的样品中我得到以下JSON数据格式&我想这些JSON数据映射到一个jqGrid的行在JQGrid中映射JSON数据

{ 
"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中定位这些属性。

感谢

+0

你能解释为什么“sub”元素是一个数组?你想使用子网格,还是可以将输入数据从sub:[{“”:“”,...}]更改为sub:{“”:“”,...}?还有一个问题:你想用什么作为行ID?学生姓名?或者你忘记包含在JSON数据中? – Oleg 2010-04-22 20:39:54

+0

您可以更改服务器发回的JSON数据,或者您调用服务,而不是您控制的服务? – Oleg 2010-04-22 21:03:07

回答

15

首先发布的所有代码有一个像dtatype: "json"而不是datatype: "json"一些错误。 “},});”代替代码“}});”而代码而不是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”,并在JSON点表示(见http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data#json_dot_notation)使用jsonmap。我使用了一个像“sub.0.number”这样的小奇怪符号,因为sub.0.number在JavaScript中与sub[0].number相同。它现在有效。

我建议你再想一想你收到的JSON数据的结构。 (请参阅我以前对您的评论问题):“sub”元素是否真的是一个始终具有一个元素的数组,或者您想使用子网格?可能数据应该从sub:[{"":"", ...}]更改为sub:{"":"", ...}?你想用rowid来做什么? student_name?然后将id: "head.student_name"添加到jsonReader定义中或将key: true属性添加到列student_name的定义中。或者你忘了把它包含在JSON数据中?

最后的建议。如果打开http://trirand.com/blog/jqgrid/jqgrid.html并在树的左侧打开“数据映射”分支\“数据优化”,您将看到一个示例,其中仅使用数组而不是JSON中的命名元素。这些数据将具有最小的尺寸,并且可以更快地从服务器传输到客户端。您的数据改为有一些字段(如“course_description”),您根本没有使用该字段。所以如果你可以在服务器上做任何修改,试着优化数据传输速率。