samtux: AJAX, div füllen

Hi!
Ich habe auf meiner Seite ein AJAX-Abfrage:

var formData = {id:id,user:userid};  
$.ajax({  
		url : "download_msg.php",  
    	type: "POST",  
    	data : formData,  
    	success: msg_ausgabe(data, textStatus, jqXHR),  
    	error: function (jqXHR, textStatus, errorThrown)  
    	{  
 			alert("Fehler", "Es ist ein Fehler beim Datenabgleich aufgetreten.");  
    	}  
	});  
function msg_ausgabe(data){  
        document.getElementById('content').innerHTML = data;  
}

Jedoch passiert bei diesem Code nichts. Chrome gibt mir keinen Javascript Fehler aus. Wenn ich in der Javascript Konsole document.getElementById('content').innerHTML='a'; eingebe, wird das a im div angezeigt...

Was funktioniert da nicht?

  1. Hallo!

    $.ajax({
    url : "download_msg.php",
         type: "POST",
         data : formData,
         success: msg_ausgabe(data, textStatus, jqXHR),

    Unter success muss eine Funktion angegeben sein. Dieser Code ruft die Funktion msg_ausgabe jedoch sofort auf (schon in dem Moment, in dem die Konfiguration für den Request gebaut wird), nicht erst beim Success. Den Rückgabewert nutzt du als Success-Callback. Der Rückgabewert ist wahrscheinlich undefined, und keine Funktion.

    Du suchst wahrscheinlich einfach:

    success: msg_ausgabe,

    Die Parameterliste mit data, textStatus, jqXHR steht dann in der Deklaration der Funktion msg_ausgabe, z.B.

    function msg_ausgabe(data, textStatus, jqXHR) {}

    error: function (jqXHR, textStatus, errorThrown)
         {
    alert("Fehler", "Es ist ein Fehler beim Datenabgleich aufgetreten.");
         }

    Hier machst du es richtig: Es wird eine Funktion übergeben. Die nimmt – wenn der Request fehlgeschlagen ist – die angegebenen Parameter entgegen.

    Chrome gibt mir keinen Javascript Fehler aus.

    Er sollte einen Fehler ausgeben. Einen ReferenceError: data, textStatus und jqXHR sind nämlich an der verwendeten Stelle nicht definierte Variablen.

    Ajax-Callbacks müssen immer Funktionen (Funktionsobjekte) sein, denn es sind Codeblöcke, die verzögert ausgeführt werden. Es lässt sich entweder direkt eine Funktion notieren, so wie du es oben beim Error-Callback machst. Oder du nennst eine vorhandene Funktion beim Variablennamen, dann wird eine Referenz auf die Funktion übergeben. In dem Moment darf sie aber noch nicht aufgerufen werden (also kleine runden Klammern dahinter).

    Grüße
    Mathias

    1. Jetzt funktioniert es. Danke!