JavaScript jQuery ändert JavaScript Variable nur nach "alert"

S.Kara

Captain
Registriert
Okt. 2013
Beiträge
3.624
[erledigt] jQuery ändert JavaScript Variable nur nach "alert"

Ich habe folgende Funktion:
Code:
function test(str) {
	var retval = "x";
	
	$.post("x.php",
	{
		...,
	}, function(data, status){
		if (data == ...) {
			$.post("y.php",
			{
				...,
			}, function(data, status){
				if (data == ...) {
					retval = 'b';
				}
			});
		}
	});
	alert(retval);
	return retval;
}
So wie die Funktion jetzt da steht (bis auf die "...") bekomme ich als Rückgabewert "b", alert gibt aber "a" aus.
Nehme ich das alert weg, bekomme ich "a" als Rückgabewert.
Was läuft hier falsch?

Edit:
Das ganze Spass scheint wohl asynchron zu laufen. Ein
$.ajaxSetup({async: false});
vor dem ersten Post ändert dies.
 
Zuletzt bearbeitet:
Hallo, nur so als Tipp. Man sollte nur in absoluten Ausnahmefällen in Javascript Requests synchron ausführen lassen.

Besser man arbeitet mit callbacks, also eine Funktion welche du als Parameter deiner Funktion test übergibtst und diese dann beim letzten result aufrufst. (also bei y.php)
 
Ja die Firefox-Konsole hat mir auch direkt eine Warnung angezeigt. :)

Danke für den Tipp mit den Callbacks.
 
AW: [erledigt] jQuery ändert JavaScript Variable nur nach "alert"

Ist, wenn ich das richtig lese, schnell erklärt: du schickst deine Anfrage nach X an den Server und gibst direkt X aus. Asynchron: deine Ausgabe von X findet schneller statt, als der Server antwortet. Synchron: deine Funktion wartet, dass der Server antwortet und das Programm wird dann erst weiter ausgeführt.

Es kommt nun drauf an, was genau du bezweckst. Entweder machst du es synchron oder setzt das return halt beim asynchronen Request in den Callback, in deinem Beispiel ist das fast egal, kommt halt auf deinen realen Usecase an.
 
Zurück
Oben