[FRAGE] Wie warte ich auf AJAX-Funktion?

mikexmagic

New member
Ey echt... Ich blicks nicht. Habe gegooglelt und gesucht und finde nur hochkomplizierte Timer,-Callback und Synchron-, Asynchron Tutorials ... Ich sehe den Wald vor lauter Bäumen nicht mehr...

Ich habe eine Funktion die einen AJAX call macht. Als Parameter übergebe ich die Daten für den Call. Das Ergebnis soll dann einfach per return zurückgegeben werden. In etwa so:

Code:
function get_ajax(ga_postdata) {
	var ajaxurl = jQuery("#ajaxurl").val();
	jQuery.post(
		ajaxurl,
		ga_postdata,
		function(response){
			return response;
                        console.log(response);
		}
	);
}

Die Funktion ansich klappt ja auch, das sehe ich an der Ausgabe in der Konsole.

Jetzt möchte ich die Funktion z.B. wie folgt aufrufen:
Code:
function show_task(task_id) {
	postdata = {
		action: 'get_task',
		task_id: task_id
	};
	results = get_ajax(postdata);
	console.log(results);
}
Theoretisch sollte mir das Ergebnis in der Console genauso wieder ausgegeben werden. Dort erscheint nur 'undefined'.
Ja klar, weil get_ajax() noch nicht fertig war als console.log schon schreibt...
Aber so klappt auch nicht:
Code:
	results = get_ajax(postdata,function(){
		console.log(results);
	});

Was mache ich falsch? Gibt es einen einfachen Weg zu warten? Blicks nicht...

Danke und Gruß Mike
 
Übergib den "fertig"-Code als Parameter und rufe ihn im Success-Callback auf, ungetestet:
HTML:
function get_ajax(ga_postdata,fertig_code) {
	var ajaxurl = jQuery("#ajaxurl").val();
	jQuery.post(
		ajaxurl,
		ga_postdata,
		function(response){
			fertig_code();
                        return response;  // <- dies hier müsste man dann überdenken
		}
	);
}

function show_task(task_id) {
	postdata = {
		action: 'get_task',
		task_id: task_id
	};
	results = get_ajax(postdata,function() {console.log(response);});
}
 
Cooler Ansatz, danke!

Klappt aber so leider auch nicht :-(

Wenn ich das richtig sehe, setze ich 'fertig_code' als zweiten Parameter ein. Und dieser wird dann gefüllt mit 'fertig_code()'?

Ich bekomme die die Fehlermeldung 'response is not defined' beim console.log...

- - - Aktualisiert - - -

Dein Code war dein Weg in die richtige Richtung. Allerdings waren nnoch korrekturen nötig:
HTML:
function get_ajax(ga_postdata,fertig_code) {
	var ajaxurl = jQuery("#ajaxurl").val();
	jQuery.post(
		ajaxurl,
		ga_postdata,
		function(response){
			fertig_code(response); // <- hier muss response übergeben werden
                        return response;  // <- tatsächlich überflüssig
		}
	);
}

function show_task(task_id) {
	postdata = {
		action: 'get_task',
		task_id: task_id
	};
	results = get_ajax(postdata,function(response) {console.log(response);}); // <- und hier muss response zum Auslesen auch angegeben werden
}

Ansonsten war das der richtig Tipp. Konnte das Ganze mit dieser Anleitung vervollständigen: http://jsnews.de/javascript-basics-callbacks/

Jetzt hab ichs verstanden :)

Danke
 
Zurück
Oben