我有一个json对象,有4个MAKE,4个MODEL,4个YEAR,4个STATE,4个PLATE,4个COLOR属性:
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属性都返回为undefined。这是为什么?如果我做data.MAKE1,data.MAKE2 ......它工作正常。
答案 0 :(得分: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"
}
]
答案 1 :(得分:4)
您可以使用bracket notation
使用字符串访问您的媒体资源 data['MAKE' + index]
答案 2 :(得分:1)
您正在创建类似MAKE = 'MAKE1'
的变量,但在使用data.MAKE
时实际上并未使用它。这将尝试从'MAKE'
访问名为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>');
}
});
}