Moin!
var foo = eval('request.responseText');
document.getElementById('test').innerHTML = stats.length;
>
> wobei request.responseText das JSON-Array ist.
> Ich dachte die Ausagbe mit .length gibt mir die Anzahl der Elemente des Arrays, es gibt mir aber die Länge des Arrays als String wieder.
>
> Was mache ich da falsch? Ich weiß nicht wie ich das erste und das zweite "Element0" z.B. ausgeben kann. Bzw. halt dessen Wert.
Schade, dass von den zwei bisherigen Antwortern niemand das Offensichtliche gesehen hat - obwohl vor allem Struppi drüber stolpern hätte müssen, da sein Gegenbeispiel den Fehler ja gerade eben NICHT macht:
Das Argument von eval() muss der auszuführende Code sein. Der in deinem Beispiel auszuführende Code lautet "request.responseText". Wenn dieser Code ausgeführt wird, wird er den Inhalt dieser Objekteigenschaft zurückgeben, die landen in der Variablen foo, und der Rest ergibt sich dann.
Der Inhalt der Objekteigenschaft ist dein JSON-String. Den willst du nicht wieder per eval() herausfinden, dazu hättest du einfacher schreiben können: `var foo = request.responseText;`{:.language-javascript}
Was du eigentlich willst, ist das Evaluieren des JSON, also des Strings, der in request.responseText enthalten ist: `var foo = eval(request.responseText);`{:.language-javascript}. Man beachte die Abwesenheit von Anführungszeichen.
Und jetzt noch ein SICHERHEITSHINWEIS: Es ist grundsätzlich keine so gute Idee, skriptgesteuert wirklich nacktes JSON auszugeben und in Javascript unbehandelt in eval() zu tun, was aber weniger daran liegt, dass eval() damit böse Sachen macht, sondern daran, dass das JSON-generierende Skript nicht nur auf AJAX-Requests antwortet, sondern grundsätzlich auf ALLE Requests, die von Browsern kommen. Relevant wird dies, wenn in dem JSON geheimzuhaltende Informationen stehen, die man nur abrufen kann, wenn man sich gegenüber dem Server authentifiziert hat!
Folgendes Szenario, um das Problem zu verdeutlichen: Ein regulärer Benutzer loggt sich ein und ruft eine Seite mit AJAX-Funktion auf. Danach ruft er aber auch eine Seite auf, die ohne sein Wissen böse Absichten hat. Die böse Seite kann zwar nicht per AJAX auf den Loginbereich zugreifen, aber es funktioniert mittels <script src="http://login.example.org/ajax/jsonskript"></script> - und wenn vorher das Standardverhalten beim Erzeugen neuer Objekte ein wenig abgeändert wurde, wird der JSON-Code, den das Skript ausgibt, so abgefangen, dass Javascript die Daten ebenfalls als Variable nutzen kann!
Das verhindert man am einfachsten, indem man den JSON-String in einen Javascript-Kommentar setzt, und diese Kommentarzeichen per String-Operation vor dem eval() wieder entfernt.
- Sven Rautenberg
--
"Love your nation - respect the others."