【问题标题】:jqGrid doesn't read JSON without square brakcetsjqGrid 不读取没有方括号的 JSON
【发布时间】:2016-04-22 07:32:52
【问题描述】:

我将此代码用于用方括号括起来的 API 并且它有效。但是,它不适用于如下所示的 API:

{"name":"Summer Tire","description":"Premium Summer Tires.","notes":"Good price","supplier":"Tire Systems","price":79,"currency":"EUR","ID":2}

这是我的代码:

function loadMaterialDetails(id) {
    $("#materialDetails").jqGrid("GridUnload"); 

    $("#materialDetails").jqGrid({
        url: url,
        mtype: "GET",
        datatype: "json",
        colModel: [
            { label: 'Material ID',     name: 'ID', key: true, width: 1 },
            { label: 'Material Name',   name: 'name', width: 2 },
            { label: 'Supplier',        name: 'supplier', width: 2 },
            { label: 'Description',     name: 'description', width: 3 },
            { label: 'Notes',           name: 'notes', width: 1 },
            { label: 'Price',           name: 'price', width: 1 },
            { label: 'Currency',        name: 'currency', width: 1 }
        ],
        viewrecords: true,
        width: 780,
        height: 250,
        rowNum: 20,
        onSelectRow: function(id){ 
          alert(id);
    }
});

更新 我放弃了。如果我知道只能获取一行,我会使用 getJSON 获取它并手动操作它。感谢您的输入!

【问题讨论】:

  • 网格需要返回一个行数组。显然,您的 API 只返回一行。
  • 我明白了,但我可以强制它显示单行吗?
  • 你的后端代码是什么样子的?
  • 我只能访问这个 API 并且必须显示数据,我对其他有多行的 API 使用网格,所以我不想只为这个使用不同的技术
  • 一种可能性是加载该 json 并将其附加到一个数组中,然后将其引用到 jqgrid

标签: javascript jquery json api jqgrid


【解决方案1】:

虽然 Oleg 的 answer 有效,但它并不完整。

试试这个:

jsonReader: {
    root: function (obj) {
        return obj instanceof Array ? obj : [obj];
    }
}

这将确保当返回的数据是行数组时网格将继续工作,同时还允许它呈现单行/对象。

【讨论】:

  • 我之前建议你使用$.isArray(obj) ? obj : [obj];,你把它改成了obj instanceof Array ? obj : [obj];。我没有看到任何真正的优势:它也是如此。抱歉,误会谁是问题的所有者。下次请写“这是Kamil Sucharski 的问题”之类的内容,而不是重复“这不是我的问题”,这样更有意义。 :-)
  • 我不想直接复制你的代码,@Oleg。我第二次说 “这不是我的问题” 应该足以暗示我没有写这个问题。
  • “这不是我的问题”的意思是“你回答,不是我问的”,而不仅仅是“另一个人问的问题”。不是吗?
  • 如果我写了这个问题,而你的回答没有回答,我会说:“这不能回答我的问题”“这不是我的问题”字面意思是问题不是我的
  • 一个简单的误解。也许“我不是 OP”会从下一次开始。 :)
【解决方案2】:

一切皆有可能。您需要添加 jsonReader 并将 root 定义为函数:

jsonReader: {
    root: function (obj) {
        return [obj];
    }
}

查看演示 https://jsfiddle.net/OlegKi/kLsqk8gc/,它会显示类似的结果

更新:我忘记在讨论中添加之前发布的小更改,现在已删除。如果响应并不总是对象,但可能是正确的(数组也是),那么可以使用:

jsonReader: {
    root: function (obj) {
        return $.isArray(obj) ? obj : [obj];
    }
}

【讨论】:

  • 版主说明: cmets 已删除。对问题/答案的评论应保持建设性、文明且仅用于澄清目的。谢谢。
  • @JonClements:谢谢!
猜你喜欢
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 2020-07-05
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
相关资源
最近更新 更多