显示json来自服务器java Map到jqgrid

时间:2014-08-14 22:07:42

标签: jquery ajax jqgrid

关于如何在jqgrid上显示以下json的任何建议?这里的问题是这来自服务器,我无法修改服务器端代码。

字段123,9785和9785是动态的,这意味着它们每次都会改变而不是静态。那么我如何在jqgrid中使用colModel或beforeProcessing来完成这个呢?

如何在字段123或9737等下获取子数据?

任何代码段都可以帮助我

谢谢!

{
        "myJavaMap": {
            "123": {
                "a": "9716",
                "b": 1222652985000,
                "c": null,
                "d": null,
                "e": 6,
                "f": 1,
                "g": 0,
                "h": 0,
                "1": "OFFLINE"
            },
            "9737": {
                "a": "9737",
                "b": 1222652985000,
                "c": null,
                "d": null,
                "e": 6,
                "f": 1,
                "g": 0,
                "h": 0,
                "i": "OFFLINE"
            },
            "9785": {
                "a": "9785",
                "b": 1222652985000,
                "c": null,
                "d": null,
                "e": 6,
                "f": 1,
                "g": 0,
                "h": 0,
                "i": "OFFLINE"
            }
        },
        "xyz": 99
    }

2 个答案:

答案 0 :(得分:1)

有几个选项,但jqGrid插件为您提供了root选项,允许您确定JSON元素的根目录。该文档将根定义为where our data begins and all other loops begin from this element.

$("#yourGrid").jqGrid({

   jsonReader : { 
      root: "myJavaMap", 
      //rest of options
   },
});

文档的检索数据部分应该有助于提供更多信息:http://www.trirand.com/jqgridwiki/doku.php?id=wiki:retrieving_data&s[]=root

答案 1 :(得分:0)

在我看来,只需使用jsonReader定义为函数root即可解决问题。 root函数应返回myJavaMap项的数组。您应该使用loadonce: true选项,因为服务器返回所有数据而不实现服务器端分页和数据排序。

The demo演示了我的建议并显示以下网格

enter image description here

它用作选项

colModel: [
    { name: "a", key: true, template: intTemplate },
    { name: "b", template: intTemplate },
    { name: "c" },
    { name: "d" },
    { name: "e", template: intTemplate },
    { name: "f", template: intTemplate },
    { name: "g", template: intTemplate },
    { name: "h", template: intTemplate },
    { name: "i" }
],
jsonReader: {
    root: function (obj) {
        var myRoot = obj.myJavaMap, arr = [], key;
        for (key in myRoot) {
            if (myRoot.hasOwnProperty(key)) {
                arr.push(myRoot[key]);
            }
        }
        return arr;
    },
    repeatitems: false
},
loadonce: true,
...

其中intTemplate我定义为

var intTemplate = {formatter: "integer", align: "right", sorttype: "integer",
        searchoptions: {
            sopt: ["eq", "ne", "lt", "le", "gt", "ge", "nu", "nn", "in", "ni"]
        }};