0

我有一个问题,我需要在 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”来做到这一点。是对的吗?

非常感谢任何指针。

谢谢,

阿莎

4

1 回答 1

0

我不建议您使用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 特殊字符(如<>&)的文本将正确显示在网格内。

此外,您应该更改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

您可以在此处找到相应的演示。

于 2012-12-07T16:04:28.157 回答