2009-05-28 15 views
33

Der Code:Variable Tasten Werte in JavaScript den Zugriff auf Objekte

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); 
     }); 
    }); 
} 

Die Objektdaten:

{ 
    "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 
    }] 
} 

Das Problem:

alert(data.A5A50000[0].time); richtig „zeigt 2009-05-27 16 : 36: 45 ".

alert(bsID); zeigt ordnungsgemäß "A5A50000" an.

alert(data.bsID[0].time); meldet "data.bsID ist undefined".

alert(data[bsID][0].time); meldet "Daten [BSID] ist undefined".

Ich bin ein wenig unklar, wenn eine Variable ist/nicht ausgewertet wird. Vielleicht übersehe ich etwas Dummes, aber ich kann mein Problem hier nicht herausfinden.

+0

Uhm, teste ich es auch und es funktioniert für mich .. –

+0

Was passiert, wenn Sie Alert (bsID) machen? ist es definiert? –

+1

Alert (BSID) meldet "A5A50000". Aktualisierte ursprüngliche updateDashboardData() - Funktion oben. Wenn ich die Funktion von der Konsole durch updateDashboardData() initiiere; Ich werde begrüßt mit: "Daten [BSID] ist undefined http://192.168.2.236/michaelg/js/xmonitor.js Zeile 21". Zeile 21 ist der Alarm(). Gibt es irgendeinen funktionalen Unterschied zwischen dem ursprünglichen Code und wie ich ihn hier anwende, was das Ergebnis beeinflussen könnte? – mikegreenberg

Antwort

88

Sie können auf Objekteigenschaften durch Punktnotation oder Klammernnotation zugreifen.

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

Wenn Sie einen dynamischen Wert haben, müssen Sie verwenden diese:

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 

Also, was Sie eigentlich wollen, ist:

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

EDIT:

Nicht sicher, was du falsch machst, aber das funktioniert für mich auf Firebugs Co nsole:

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); 
+0

Nachdem Sie Ihren Vorschlag versucht haben, alert (data [bsID] [0] .time); Berichte "Daten [BSID] ist undefiniert". Ich habe den Code, den ich oben getestet habe, aktualisiert. Ich teste das in der Firebug-Konsole (offensichtlich auf FF). – mikegreenberg

+0

Ich habe Ihren Testcode ausprobiert und es hat auch gut für mich funktioniert.Wenn ich mir den obigen Code anschaue, ist das einzige, was ich mir vorstellen kann, falsch zu laufen, dass die BSID nicht das ist, was erwartet wurde. Beim Testen des Typs von bsID wird "string" gemeldet. Weitere Testvorschläge ein Problem mit den von getJSON() zurückgegebenen Daten. Wenn ich versuche, auf Daten [bsID] [0] zuzugreifen, wo Daten von getJSON sind, meldet es undefined. Wenn ich Daten explizit als das Objekt definiere, das ich in der Originalfrage gepostet habe, funktioniert es. Ich muss mit den zurückgegebenen Daten weiterspielen, um zu sehen, was falsch ist. – mikegreenberg

3

In Javascript können Sie entweder Objekt oder Array-Style-Notation verwenden, um ein Attribut nachzuschlagen. Die folgenden sind äquivalent:

data.A5A50000 
data['A5A50000'] 

Bei der zweiten Syntax können Sie eine Variable anstelle eines Objekts Zeichenfolge verwenden:

data[bsID][0] 
+0

Daten [BSID [0]] ist nicht das, was er will. Es sind Daten [bsID] [0] –

Verwandte Themen