【问题标题】:trouble to displaying json data on jqgrid and formatting在 jqgrid 上显示 json 数据和格式化的麻烦
【发布时间】:2012-12-07 15:07:28
【问题描述】:

我有一个问题,我需要在 jqgrid 上显示 json 数据。我得到的数据格式如下:

{"data":{"data":"\tat org.aaa.aaa.aaa.aaa.aaa.aaa(aaa.java:512)[147:org.aaa.aaa.aaa:9.1.1]\n\tat aaa.aaa.aaa.aaa.aaa.aaa(aaa.java:1789)[146:org.aaa:9.1.1]\n"}}

我显示数据的javascript是:

 $("#grid").jqGrid({
  url: '/getdata',
      datatype: "json",
  mtype: "GET",
  colNames:['data'],
  colModel:[
     {name:'data', index:'data', align:'center'}
  ],
   jsonReader : {
          repeatitems: false,
      id: "0",
      cell: "",
       root: "logs",
      page: function() { return 1; },
      total: function() { return 1; },
      records: function(obj) { return obj.length; }
    },
   loadonce: true,      
   viewrecords: true,
   autowidth: true,
   multiselect: false,
   ignoreCase: true,
   sortable: true,
   height: 600, 
   rowNum: 999
 });

我尝试了几种组合,但无法使用此代码将数据显示在 jqgrid 上。 jqgrid 显示一个空表。我想我在这里遗漏了一些东西。

我还必须格式化数据,以便每次点击“\n”时,我们都会在新行中显示它。我想我可以在列的格式化程序中使用“addrowdata”来做到这一点。对吗?

非常感谢任何指针。

谢谢,

阿莎

【问题讨论】:

    标签: jquery jqgrid


    【解决方案1】:

    我不建议你使用addRowData。使用beforeProcessing将服务器返回的数据修改为jqGrid可以读取的格式会更有效。例如,您可以将data.data 部分除以\n 并填充相应项目的数组:

    autoencode: true,
    beforeProcessing: function (data) {
        var items = data.data.data.split("\n"), i, l, item;
        data.logs = [];
        for (i = 0, l = items.length; i < l; i++) {
            item = $.trim(items[i]);
            if (item.length > 0) {
                data.logs.push([item]);
            }
        }
    }
    

    我在上面的代码中包含了对jQuery.trim 的调用,以删除每行开头或结尾处不需要的\t 或其他空白字符。

    我还添加了 autoencode: true 选项,强烈建议确保包含 HTML 特殊字符(如 &lt;&gt;&amp; 等)的文本将正确显示在网格。

    此外,您应该将jsonReader 更改为例如以下内容

    jsonReader: {
        root: "logs",
        cell: "",
        id: function () {
            return function () {
                return $.jgrid.randId();
            }
        },
        page: function() { return 1; },
        total: function() { return 1; },
        records: function(obj) { return obj.logs.length; }
    }
    

    id 的值看起来很棘手,但该实现会为每一行的id 属性生成真正唯一的值。

    你会找到相应的演示here

    【讨论】:

    • 感谢奥列格,做了一些改动,就像一个魅力。我必须进行更改,因为我在发布数据时错过了一些东西,并且我获得了免费的搜索/过滤。不过有一个问题,有没有办法在搜索文本框旁边添加一个过滤器图标。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多