【问题标题】:jqgrid: can't display json datajqgrid:无法显示json数据
【发布时间】:2013-07-10 07:52:16
【问题描述】:

我正在尝试在 jqgrid 中显示 json 数据,但没有得到任何行。

这是我的网格:

$('#jqList').jqGrid({
        url: '/my/url',
    datatype: 'json',
    colNames:['field1', 'field2'],
    colModel:[
        {name:'field1',index:'field1', width:200},
        {name:'field2',index:'field2', width:300}
    ],
    pager: '#jqPager',
        rowNum: 20,
        rowList: [10, 20, 30, 50],
        height: '100%',
        viewrecords: true,
        jsonReader: {
            repeatitems: false,
            root: function (obj) { return obj; },
            page: function (obj) { return 1; },
            total: function (obj) { return 1; },
            records: function (obj) { return obj.length; },
            id: 'id'
        }
});

我可以在浏览器中访问我的网址,它会显示如下内容:

    {"rows": [
        {"id": "3", "field1": "blabla", "field2": "blabla"},
        {"id": "10", "field1": "blabla", "field2": "blabla"},
        {"id": "4", "field1": "blabla", "field2": "blabla"},
        {"id": "8", "field1": "blabla", "field2": "blabla"}
    ]
}

但是当我显示我的网格时,我没有我所说的任何数据。 如果我检查控制台,我的 url 上有一个 500 错误(在 url 中添加了一些参数)

我希望我提供了足够的信息。

编辑 萤火虫控制台说:

"NetworkError: 500 Internal Server Error - http://localhost/path/to/my/url?_search=false&nd=1373439192511&rows=20&page=1&sidx=&sord=asc"

我在 apache 服务器上使用 PHP

php 代码:

header('Content-type: application/json');
foreach ($cars as $k => $v) {
    $tab['rows'][$k] = $v['Car'];
}
echo json_encode($tab);

谢谢

【问题讨论】:

  • 对不起,您能用您的 500 错误(消息等)的详细信息编辑问题吗
  • 我已经添加了 firebug 控制台日志

标签: json jqgrid


【解决方案1】:

好像是jqGrid生成的URL:

http://localhost/path/to/my/url?_search=false&nd=1373439192511&rows=20&page=1&sidx=&sord=asc

导致服务器端出现某种错误(我不知道您使用的是哪种服务器端技术,但例如在 ASP.NET 的情况下,这种响应意味着存在未处理的异常)。

您已声明干净的 URL,应如下所示:

http://localhost/path/to/my/url

工作正常。在这种情况下,如果您不需要 jqGrid 添加的参数,您可以尝试通过告诉 jqGrid 不要发送它们来解决问题:

$('#jqList').jqGrid({
    url: '/my/url',
    datatype: 'json',
    colNames:['field1', 'field2'],
    colModel:[
        {name:'field1',index:'field1', width:200},
        {name:'field2',index:'field2', width:300}
    ],
    pager: '#jqPager',
    rowNum: 20,
    rowList: [10, 20, 30, 50],
    height: '100%',
    viewrecords: true,
    prmNames: {
        page: null,
        rows: null,
        sort: null,
        order: null,
        search: null,
        nd: null
    },
    jsonReader: {
        repeatitems: false,
        root: function (obj) { return obj; },
        page: function (obj) { return 1; },
        total: function (obj) { return 1; },
        records: function (obj) { return obj.length; },
        id: 'id'
    }
});

这不是一个完美的解决方案(我们仍然不知道您的服务器为什么会产生内部错误以及如何解决该问题),但它可能会使您的代码正常工作。如果您想解决服务器端问题,我们必须更多地了解服务器上发生的事情。

【讨论】:

  • 谢谢。我在 apache 服务器上使用 php。我尝试了你的 prmNames 方法,我仍然有 500 错误,但是现在 url 没有任何参数。
  • @ThEBiShOp 然后您需要调试并向我们提供有关您的服务器端代码的更多信息。问题就在那里,我们在客户端无能为力。检查您的 Apache 日志以了解启动器。
  • 在 apache 错误日志中,我没有任何相关内容(最后一个条目是 2 小时前丢失的 favicon),在访问日志中我有:127.0.0.1 - - [10/Jul/2013:11:21:59 +0200] "GET /my/url HTTP/1.1" 500 169
  • @ThEBiShOp 这意味着 Apache 将这 500 视为应用程序生成的响应,您需要深入挖掘才能找到 PHP 中引发错误的地方。这是 PHP 错误日志的简短描述配置:cyberciti.biz/faq/…
  • @tpeczek:来自服务器的 JSON 响应以 rows 作为 root。因此,在服务器端解决 500 错误问题后,需要将 jsonReaderroot 定义更改为 root: "rows"
【解决方案2】:

似乎 jqGrid 正在等待这样的 url:path/to/my/json/url 尽管我给了url : path/to/my/url 在开发服务器上...url : path/to/my/url 在测试服务器上工作正常...

我真的不明白为什么,如果 url 是“错误的”,为什么错误不是 404?

不管怎样,它现在工作正常......

感谢您的宝贵时间

【讨论】:

    【解决方案3】:

    通常当我收到 500 个错误时,这意味着 javascripts 或 mvc 控制器的 url 路径错误。

    第一件事就是第一,

    您的数据图与​​您的网格在同一个文件中吗?如果是,则给它一个名称并在 url 中引用该名称。如果您从数据库中获取数据,那么您可能使用控制器来获取数据并将其转换为 json 可序列化对象。所以 url 应该指向那个控制器的位置。

    【讨论】:

      猜你喜欢
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      相关资源
      最近更新 更多