json - 在 JQGrid 中映射 JSON 数据

标签 json jqgrid jqgrid-php subgrid

我正在使用 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 能够定位这两个字段。同时其他两列值,即日期和数字位于“子”下,即使是那些列我也无法用 jqgrid 映射它

所以请帮助我如何在 JQGrid 中定位这些属性。

谢谢

最佳答案

首先发布的代码有一些错误,如 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 相同.它现在有效。

我建议您再考虑一下您收到的 JSON 数据的结构。 (请参阅我之前对您的问题的评论):“子”元素是否真的是一个始终包含一个元素的数组,或者您想使用子网格?可能数据应该从 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 ”)。所以如果您可以在服务器中进行任何更改 代码尝试优化数据传输速率。

关于json - 在 JQGrid 中映射 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2690657/

相关文章:

php - PDO Foreach 获取循环返回具有特定 id 的第一行,其余为 false

android - JSON 解析帮助

javascript - JavaScript 中的 PHP JSON 变量

javascript - 使用java中Action的对象列表填充jqgrid中的表

jquery - jQgrid - 完整的产品可以免费供个人使用吗?

javascript - JqSuite PHP : get column name or id?

jquery - JSON问题中的Rails HTML编码

javascript - 使用 beforeShowForm 事件填充 jqGrid 下拉列表

php - jQGrid 与 Oracle 数据库

php - 如何使用 jqgrid 发布数据中的 PHP 数组重新格式化 m/d/y 中的日期?