Was macht diese Funktion?
Iris
- javascript
Hallo!
Ich lese mir gerade ein AJAX-Tutorial durch. Aber bei folgender Funktion bin ich stutzig geworden.
function ausgeben() {
if (http.readyState == 4) {
var daten = http.responseText; // das ist mir noch klar
daten = eval("(" + daten + ")"); // aber was hier passiert ist mir rätselhaft
// Und zur Vervollständigung noch hier der Rest der Funktion
var liste = document.getElementById("Liste");
for (var i = 0; i < daten.length; i++) {
var link = daten[i];
var li = document.createElement("li");
var a = document.createElement("a");
a.setAttribute("href", link.url);
var txt = document.createTextNode(link.text);
a.appendChild(txt);
li.appendChild(a);
liste.appendChild(li);
}
}
}
Trotz suche im WWW habe ich nichts gefunden. Kann mir bitte jemand erklären wie diese Funktion arbeitet? Vielen vielen Dank!
Liebe Grüße, Iris!
PS: Ich poste hier noch mal den kompletten Code:
function ausgeben() {
if (http.readyState == 4) {
var daten = http.responseText;
daten = eval("(" + daten + ")");
var liste = document.getElementById("Liste");
for (var i = 0; i < daten.length; i++) {
var link = daten[i];
var li = document.createElement("li");
var a = document.createElement("a");
a.setAttribute("href", link.url);
var txt = document.createTextNode(link.text);
a.appendChild(txt);
li.appendChild(a);
liste.appendChild(li);
}
}
}
Hell-O!
daten = eval("(" + daten + ")"); // aber was hier passiert ist mir rätselhaft
Des Rätsels Lösung liegt weiter unten:
for (var i = 0; i < daten.length; i++) {
Aha, Daten ist ein Array. Ein Array definiert man u.a. durch die Kurzschreibweise
myArr = (elem1, elem2, ...);
Nun scheint der Inhalt von http.responseText eine kommaseparierte Liste zu sein, um die eine Klammer gebaut wird. Dieser String wird anschließend als Javascript-Ausdruck interpretiert, sodass im Ergebnis die Daten aus responseText in dem Array "daten" vorliegen sollten.
Siechfred
Hallo,
Aha, Daten ist ein Array. Ein Array definiert man u.a. durch die Kurzschreibweise
myArr = (elem1, elem2, ...);
Äh, nicht ganz. [elem1, elem2, elem3, ...] ist die besagte Kurzschreibweise.
Klammern gibt es, um in Ausdrücken die Operatorenrangfolge zu umgehen. Bei ([elem1, elem2, elem3, ...]) sind die Klammern eher überflüssig.
Nun scheint der Inhalt von http.responseText eine kommaseparierte Liste zu sein
Wie gesagt eher [elem1, ... ].
(Im Übrigen ist für so etwas XMLHttpRequest ungeeignet, dafür nutzt man JSONP. Das heißt, man bindet dynamisch ein script-Element ein, das ein externes Script lädt. Das ruft dann eine gewünschte Funktion mit gewissen Parametern auf, z.B. wie hier einem Array.)
Mathias