Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jqGrid不';不使用方形brakcets读取JSON_Javascript_Jquery_Json_Api_Jqgrid - Fatal编程技术网

Javascript jqGrid不';不使用方形brakcets读取JSON

Javascript jqGrid不';不使用方形brakcets读取JSON,javascript,jquery,json,api,jqgrid,Javascript,Jquery,Json,Api,Jqgrid,我将这段代码用于用方括号括起来的API,它很有效。但是,它不适用于如下所示的API: {"name":"Summer Tire","description":"Premium Summer Tires.","notes":"Good price","supplier":"Tire Systems","price":79,"currency":"EUR","ID":2} 这是我的密码: function loadMaterialDetails(id) { $("#materialDeta

我将这段代码用于用方括号括起来的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获取它并手动操作它。谢谢你们的支持

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

jsonReader: {
    root: function (obj) {
        return [obj];
    }
}
查看演示,其中显示的结果如下

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

jsonReader: {
    root: function (obj) {
        return $.isArray(obj) ? obj : [obj];
    }
}
虽然奥列格的作品,但它是不完整的

试试这个:

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

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

网格需要返回一个行数组。很明显,你的API只返回了一行。我明白了,但是我能强迫它显示一行吗?你的后端代码是什么样子的?我只能访问这个API,并且必须显示数据,我在有多行的其他API中使用网格,所以我不想仅在这一行中使用不同的技术。一种可能性是加载json并将其附加到数组中,然后将其引用到jqgridI,我建议您使用
$.isArray(obj)?obj:[obj]。我看不出有什么真正的好处:这是做同样的事。抱歉,误解了问题的所有者是谁。下次请写下类似“这是Kamil Sucharski的问题”这样的话,而不是重复“这不是我的问题”,这样更有意义。:-)我不想复制你的代码,@Oleg。第二次我说“这不是我的问题”应该足以暗示我没有写这个问题。“这不是我的问题”的意思是“你回答,不是我问的”,而不仅仅是“另一个人问的问题”。不是吗?如果我写了这个问题,而你的答案没有回答,我会说:“这没有回答我的问题”。“这不是我的问题”字面意思是这个问题不是我的。一个简单的误解。也许下次“我不是OP”就可以了主持人注:删除评论。对问题/答案的评论应保持建设性、文明,并仅用于澄清目的。谢谢你。@JonClements:谢谢你!