Zwei Funktionen mit Ajax funktionieren nicht

jenssie

Grünschnabel
Hallo,
Ich habe folgende 2 Funktionen:

code:

function seiteladen(seitenurl,div)
{
xhr = http();
xhr.open("GET", seitenurl, true);
xhr.setRequestHeader("Conent-Type","application/x-www-form-urlencoded");
xhr.onreadystatechange = datenAusgeben(div);
xhr.send(null);
fortschritt(div);
}

function datenAusgeben(div) {
if (xhr.readyState == 4) {
var rueckgabe = xhr.responseText;
document.getElementById(div).innerHTML = rueckgabe;
}
}

codeende:

Das kommische ist bei Firefox funktioniert und im Internet Explorer nicht.
der Intzernet Explorer 8 hat einen debugger drinn und der sagt das diese Zeile:
xhr.onreadystatechange = datenAusgeben(div);

Typen unverträglich

kann mir da einer helfen ?

mfg jens
 
Warum setzt du bei GET einen Header ?

Und was bedeutet das:

HTML:
fortschritt(div);
?

Sicher das du bei dem Request alles richtig gemacht hast ?

  • All ............ http = new XMLHttpRequest()
  • IE ............. http = new ActiveXObject("Microsoft.XMLHTTP")
 
Hallo,

Ich habe schon googelt und immer dach desucht:

xhr.onreadystatechange = datenAusgeben(div);

und bis jetzt habe ich alle gefunden die es so schreiben

xhr.onreadystatechange = datenAusgeben();

also datenAusgeben(); war immer leer geht das nicht anders ?
Weil beim Firefox der meldet komischer weis keinen fehler.

mfg jens
 
Warum setzt du bei GET einen Header ?

Und was bedeutet das:

HTML:
fortschritt(div);
?

Sicher das du bei dem Request alles richtig gemacht hast ?

  • All ............ http = new XMLHttpRequest()
  • IE ............. http = new ActiveXObject("Microsoft.XMLHTTP")

Hallo,

Ja das problem ist dann das die div nich mit übergebenh wird.

function datenAusgeben(div)

mfg jens
 
Hallo,

und bis jetzt habe ich alle gefunden die es so schreiben

xhr.onreadystatechange = datenAusgeben();

also datenAusgeben(); war immer leer geht das nicht anders ?
Weil beim Firefox der meldet komischer weis keinen fehler.

mfg jens

Es geht nicht darum, dass die Klammern leer sind, sondern sie dürfen garnicht da sein.

Der Unterschied:
mit Klammern wird die Funktion sofort aufgerufen(nicht erst beim onreadystatechange)...und ihr Rückgabewert dem onreadystatechange-Member des Requests zugewiesen. Ohne Klammer wird die Funktion selbst dem onreadystatechange-Event zugewiesen, so wird sie erst ausgeführt, wenn der Event eintritt.

Wenn du der Funktion Parameter übergeben willst, geht dies aber trotzdem:

Ersetze jenes:
Code:
xhr.onreadystatechange = datenAusgeben(div);

hierdurch:
Code:
var _div=div;
xhr.onreadystatechange = function(){datenAusgeben(_div)};

Dem onreadystatechange wird damit eine anonyme Funktion zugewiesen, und erst diese anonyme Funktion ruft die gewünschte Funktion auf.

Dass es im FF funktionieren mag, ist eine reine Zeitfrage, hängt also davon ab, wie schnell der Server antwortet.
 

Neue Beiträge

Zurück