使用variables键访问JavaScript对象中的值

代码:

function updateDashboardData() { $.getJSON("includes/system/ajaxDataInterface.php", {recordcount:1}, function(data) { $('.stationContainer').each(function(data) { var bsID = $(this).attr("id"); var bsStatus = $(this).children('.stationStatus'); alert(data[bsID][0].time); bsStatus.find('.bs_maxHandsets').text(data[bsID][0].maxHandsets); bsStatus.find('.bs_time').text(data[bsID][0].time); }); }); } 

对象数据:

 { "A5A50000": [{ "bsid": "A5A50000", "chanCount": 17, "time": "2009-05-27 16:36:45", "avgInterference": 1.711765, "maxInterference": 4.97, "avgHandsets": 205.1176, "maxHandsets": 315, "avgCalls": 6.4118, "maxCalls": 13, "avgCBA": 3868.98059, "maxCBA": 7463, "sumSuccessCBA": 197318, "sumTimeoutHandoff": 133, "sumAttemptHandoff": 1028, "sumDeniedHandoff": 216, "sumConfirmHandoff": 679, "sumHandoffNetwork": 61873, "sumJoinNetwork": 96888, "sumLeaveNetwork": 93754, "sumRcvdKeepalive": 98773, "sumTimeoutKeepalive": 19748, "sumAttemptUplink": 93689, "sumBlockedUplink": 62453 }] } 

问题:

alert(data.A5A50000[0].time); 正确显示“2009-05-27 16:36:45”。

alert(bsID); 正确显示“A5A50000”。

alert(data.bsID[0].time); 报告“data.bsID是未定义的”。

alert(data[bsID][0].time); 报告“数据[bsID]未定义”。

当一个variables不被评估时,我有点不清楚。 也许我忽略了一些愚蠢的东西,但是我不知道我的问题在这里。

您可以通过点符号或括号符号访问对象属性。

 var x = {'test': 'hi'}; alert(x.test); // alerts hi alert(x['test']); // alerts hi 

当你有一个dynamic值时,你必须使用后者:

 var property = 'test'; alert(x.property); // looks for x.property, undefined if it doesn't exist alert(x[property]); // looks for x['test'], alerts hi 

所以你真正想要的是:

 alert(data[bsID][0].time); 

编辑

不知道你在做什么错,但是这对我在Firebug的控制台上工作:

 var data = {"A5A50000":[{"bsid":"A5A50000","chanCount":17,"time":"2009-05-27 16:36:45","avgInterference":1.711765,"maxInterference":4.97,"avgHandsets":205.1176,"maxHandsets":315,"avgCalls":6.4118,"maxCalls":13,"avgCBA":3868.98059,"maxCBA":7463,"sumSuccessCBA":197318,"sumTimeoutHandoff":133,"sumAttemptHandoff":1028,"sumDeniedHandoff":216,"sumConfirmHandoff":679,"sumHandoffNetwork":61873,"sumJoinNetwork":96888,"sumLeaveNetwork":93754,"sumRcvdKeepalive":98773,"sumTimeoutKeepalive":19748,"sumAttemptUplink":93689,"sumBlockedUplink":62453}]}; var bsID = 'A5A50000'; alert(data[bsID][0].time); 

在Javascript中,您可以使用对象或数组式样的表示法来查找属性。 以下是等同的:

 data.A5A50000 data['A5A50000'] 

使用第二种语法,您可以使用variables来代替对象string:

 data[bsID][0]