1

我有一个 json 对象,它有 4 个 MAKE、4 个模型、4 个年份、4 个状态、4 个 PLATE、4 个颜色属性:

Object {MAKE1="xxx ", MODEL1='xxx', YEAR1='xxx', STATE1='xxx', PLATE1='xxx', COLOR1='xxx', MAKE2='xxx', MODEL2='xxx' ,..., MAKE3='xx',..., MAKE4='xxx',...,COLOR4='xxx'}

我的JavaScript:

 function displayPP() {
            $.getJSON('/ipad/api/formpp/' + personId + '/getmemberlatestpp', function(data) {

                for (var index=1; index<5; index++) {
                    $('#ppBody').append('<tr>');
                    var MAKE = 'MAKE' + index, MODEL = 'MODEL' + index, YEAR = 'YEAR' + index, STATE = 'STATE' + index, PLATE = 'PLATE' + index, COLOR= 'COLOR' + index;
                    var HTML = '<td>' + data.MAKE + '</td><td>' + data.MODEL + '</td><td>' + data.YEAR + '</td><td>' + data.STATE + '</td><td>' + data.PLATE + '</td><td>' + data.COLOR + '</td>';
                    $('#ppBody').append(HTML);
                    $('#ppBody').append('</tr>');      
                }                   
            });
    }

所有 json 属性返回为未定义。这是为什么?如果我做 data.MAKE1, data.MAKE2 ...它工作正常。

4

3 回答 3

7

var foo = "X"; data.foo将指foo财产,而不是X财产。

如果要使用变量来表示属性名称,则必须使用方括号表示法(它采用字符串而不是标识符)。

data[foo]

也就是说,除了数字计数器之外,永远不要有共享名称的东西。使用正确的数据结构:

[ 
    { 
        "make": "xxx", 
        "model": "xxx", 
        "year": "xxx", 
        "state": "xxx", 
        "plate": "xxx",
        "color": "xxx"
    },
    { 
        "make": "xxx", 
        "model": "xxx", 
        "year": "xxx", 
        "state": "xxx", 
        "plate": "xxx",
        "color": "xxx"
    }
]
于 2013-08-14T21:01:34.753 回答
4

您可以使用括号表示法使用字符串访问您的属性

data['MAKE' + index]

于 2013-08-14T21:03:36.270 回答
1

您正在创建一个类似 的变量MAKE = 'MAKE1',但在使用 时实际上并没有使用它data.MAKE。这将尝试访问名为'MAKE'from的属性data。要从字符串中查找变量,您需要使用括号表示法,例如data[MAKE].

这是替换所有不正确的点属性查找的更正版本:

function displayPP() {
    $.getJSON('/ipad/api/formpp/' + personId + '/getmemberlatestpp', function(data) {
        for (var index=1; index<5; index++) {
            $('#ppBody').append('<tr>');
            var MAKE = 'MAKE' + index, MODEL = 'MODEL' + index, YEAR = 'YEAR' + index, STATE = 'STATE' + index, PLATE = 'PLATE' + index, COLOR= 'COLOR' + index;
            var HTML = '<td>' + data[MAKE] + '</td><td>' + data[MODEL] + '</td><td>' + data[YEAR] + '</td><td>' + data[STATE] + '</td><td>' + data[PLATE] + '</td><td>' + data[COLOR] + '</td>';
            $('#ppBody').append(HTML);
            $('#ppBody').append('</tr>');      
        }                   
    });
}
于 2013-08-14T21:06:42.970 回答