• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

AJAX: Antwort auf Anfrage kommt nicht zurück

  • Ersteller Ersteller ohrflieger
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
O

ohrflieger

Guest
Hallo,

Code:
function sendEsAb(seite,zutat,anzeige) {
teil = "";
if(zutat != "") {
  teil = '&n=' + zutat;
}
urlurl2 = 'zeig.php?a=' + seite + '&z=' + Math.random();
  resOb.open('get', urlurl2, true);

  resOb.setRequestHeader("Pragma", "no-cache");
  resOb.setRequestHeader("Cache-Control", "must-revalidate");
  resOb.setRequestHeader("If-Modified-Since", document.lastModified);

  resOb.onreadystatechange = sendEsAb2(anzeige);
  resOb.send(null);
}

function sendEsAb2(wohin) {
  if(resOb.readyState == 4){
    document.getElementById(wohin).innerHTML = resOb.responseText;
  }
  else {
    document.getElementById(wohin).innerHTML = '<div style="width:400px;text-align:center;"><img src="img/laden.gif" alt=""/>Aktualisiert...</div>';
  }
}

Mit dieser Funktion sollen mehrere unterschiedliche Abfragen an die Datei zeig.php ausgeführt werden. AJAX schickt die Anfragen auch ab und die zeig.php arbeitet auch, aber die Antwort kommt nicht, es wird nur das Ladebildchen angezeigt.
Komischerweise funktioniert es, wenn ich für jede unteschiedliche Anfrage eine eigene Funktion bastele.
Habe ich einen Fehler im Code?

Würde mich über Hilfe sehr freuen.
 
Weil deine Funktion direkt in sendEsAb() ausgeführt wird und nicht, wenn der Request-Status sich ändert. Du musst eine Funktionsreferenz übergeben.
 
Äh... das hab ich jetzt nicht verstanden. Was muss ich machen?

Was ich vielleicht noch sagen sollte, die Erzeugung des XMLHttpRequestObjects ist schon vorher geschehen und in resOb verfügbar.
 
Du suchst Closures:
Code:
resOb.onreadystatechange = sendEsAb2(anzeige);
Code:
function sendEsAb2(wohin) {
    return function() {
        if(resOb.readyState == 4){
            document.getElementById(wohin).innerHTML = resOb.responseText;
        } else {
            document.getElementById(wohin).innerHTML = '<div style="width:400px text-align:center;"><img src="img/laden.gif" alt=""/>Aktualisiert...</div>';
        }
    }
}
 
danke, klappt :)

Aber warum? Wozu muss man diese Funktion in der Funktion schreiben?
Vorher hat es auch schon mal ohne funktioniert.
 
Kann nicht funktioniert haben.
Code:
resOb.onreadystatechange = sendEsAb2(anzeige);
führt die Funktion sofort aus und da diese nichts zurück gibt, wird onreadystatechange null zugewiesen und nicht ausgeführt. Mit return function() { } gibt sie eine anonyme Funktion zurück, die ausgeführt werden kann.
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben