在网格中显示JSON结果和'undefined'的内容

时间:2012-02-07 17:10:47

标签: jquery json grid

所以,我正在使用JQuery读取JSON并将其放入网格中。问题是:当JSON为:

时,网格不会显示
{"result":[[{"type":"VOMesas.TMesas","id":1,"fields":{ "FUsers":1,"FEnclosing":0,"FClientName":"","FCode":100,"FStatus":1,"FTotalValue":128.25}}]]}

但是如果JSON就是那样,没有字段:{...}:

{"result":[[{"type":"VOMesas.TMesas","id":1,"FUsers":1,"FEnclosing":0,"FClientName":"","FCode":100,"FStatus":1,"FTotalValue":128.25}]]}

它读取。

这是我正在使用的功能:

function getContent(order) {
    $.getJSON("query.json", function(data) {
        $.each(data.result, function(i, item) {

            var grid = '<table border="1">';

            var i=0;

            var CAMPO;

            for (i=0; i < item.length; i++){
                CAMPO = item[i];


                grid += '<tr><td>'+ CAMPO.FQtdPessoas +
                        '</td><td>'+ CAMPO.FDataFechamento +
                        '</td><td>'+ CAMPO.FTempoPermanencia +
                        '</td><td>'+ CAMPO.FNomeCliente +
                        '</td><td>'+ CAMPO.FValorAcrescimo +
                        '</td><td>'+ CAMPO.FValorDesconto +
                        '</td><td>'+ CAMPO.FValorServico +
                        '</td><td>'+ CAMPO.FDataAbertura +
                        '</td><td>'+ CAMPO.FNumero +
                        '</td><td>'+ CAMPO.FStatus +
                        '</td><td>'+ CAMPO.FValorTotal +
                        '</td><td>'+ CAMPO.FTerminalAberto +
                        '</td><td>'+ CAMPO.FNumeroVenda +
                        '</td><td>'+ CAMPO.FGarcon +
                        '</td></tr>';
            }
            grid += '</table>'; 

            $("#dvContent").html(grid);
            $("#dvContent").find("a").click(function(e){
                var link = $(this);
                getContent(link.html());
            });
        });
    });
}

$(document).ready(function(){
$(function() {
getContent();
});
});

3 个答案:

答案 0 :(得分:1)

看起来问题出现在您省略的代码中:

grid += '<tr><td>'+ ........ +'</td></tr>';

如果json结果采用第一种格式,那么您应该能够使用fields访问CAMPO.fields对象。

修改

示例:

grid += '<tr><td>'+ CAMPO.fields.FQtdPessoas +'</td><td>'+ CAMPO.fields.FDataFechamento +'</td><td>'+ [...]

答案 1 :(得分:0)

要使用字段下的属性,请使用:

item.result[0][0].fields.<<Your proprerties here>>

对于 ID 类型执行:

item.result[0][0].id
item.result[0][0].type

编辑:

for (i = 0; i < item.result.length; i++) {
            CAMPO = item.result[i][i].fields;
             grid += '<tr><td>'+ CAMPO.FQtdPessoas +
                    '</td><td>'+ CAMPO.FDataFechamento +'</td></tr>';
}

答案 2 :(得分:0)

在您的代码中,CAMPO引用了如下所示的对象:

{
    "type": "VOMesas.TMesas",
    "id": 1,
    "fields": {
        "FUsers": 1,
        "FEnclosing": 0,
        "FClientName": "",
        "FCode": 100,
        "FStatus": 1,
        "FTotalValue": 128.25
    }
}

要访问其字段,请使用fields属性(或将CAMPO设置为item[i].fields)。