• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] [jQuery] Funktionsweise von .ajax()

fotetaja

New member
Hallo,

Ich habe Folgendes Problem wenn ich mit meinem Script eine Variable alerten will:

Code:
	var gettsdatarequest;
	var ycoord;

	var ajaxrequest = $.ajax({
		type: "POST",
		url: "php/getTSdata.php",
		data: { xcoord: coord}
	});

	ajaxrequest.done(function(msg){
		ycoord = msg;
	})

	alert(ycoord);

Ich bekomme immer folgenden Wert zurück:

undefined.

Ich hoffe ihr könnt mir Helfen,

Grüße,

fotetaja
 
Zuletzt bearbeitet von einem Moderator:
AW: Variable in Funktion zuweisen: undefined

Die .ajax Funktion von jQuery gibt so nichts zurück. var ajaxrequest = $.ajax ist also Quatsch. Du musst den auszuführenden Code in den success Parameter einbauen. Sähe dann so aus:
HTML:
$.ajax({
		type: "POST",
		url: "php/getTSdata.php",
		data: { xcoord: coord},
                success: function(msg) {
                          alert(msg);
                }
});
Den Titel habe ich auch mal der Frage entsprechend korrigiert.
 
AW: Variable in Funktion zuweisen: undefined

Thx für deine Antwort.
Mein Frage wäre jetzt aber wie ich die variable msg auserhalb von $.ajax({}) in eine neue Variable speichern kann.

ein



Code:
var neuevar;

$.ajax({
		type: "POST",
		url: "php/getTSdata.php",
		data: { xcoord: coord},
                success: function(msg) {
                          neuevar = msg;
                }
});
funktioniert leider nicht.

//PS: Sry hab oben vergessen dass ich das erst in die Variable speichern will.
 
Zuletzt bearbeitet:
Nein, das geht nicht. Ein Ajax Request läuft asynchron, steckt ja im Namen. Das heißt, während der übrige Code weiter läuft, wird Ajax parallel ausgeführt. Du musst umdenken. Sämtlicher Code, der auf dem Ajax Request basiert, von dessen Ergebnis abhängig ist gehört in den success Parameter, auch wenn das komisch anmuten mag.
Oder du musst den Ajax Request auf synchron stellen aber das empfehle ich nicht.
 
Um nicht zuviel zu weit eingerückten Code zu haben kann man sich den Code vorher in eine Variable oder eine function definieren und diesen im success Parameter aufrufen. Das macht das ganze etwas freundlicher.
 
Weil so etwas jetzt hier mehrmals vorkam:
Code:
var gettsdatarequest;
var ycoord;

Meine Frage: ist das üblich? Wozu macht man so etwas? Warum erstellt man nicht gleich die Variable erst bei der Wertzuweisung? :confused:
 
Julian, das ist einfach die Initialisierung. Manchmal macht man das, weil die Zuweisung in einem unteren Scrope erfolgt, man die Variable aber übergreifend braucht.
 
AW: Variable in Funktion zuweisen: undefined

Die .ajax Funktion von jQuery gibt so nichts zurück. var ajaxrequest = $.ajax ist also Quatsch.

Das ist falsch: https://api.jquery.com/jQuery.ajax/ - da kommt ein jqXHR-Objekt zurück und mas mit dem .done() ist komplett richtig, da es auf der Promiseschnittstelle des jqXHR aufbaut.

Das mit dem synchron vs. asynchron ist natürlich trotzdem richtig, wobei man erwähnen könnte, dass man .ajax durch den asynch-Parameter synchron machen kann - was ich aber nicht empfehlen würde, da es den Browser einfirert.
 
AW: Variable in Funktion zuweisen: undefined

Das ist falsch: https://api.jquery.com/jQuery.ajax/ - da kommt ein jqXHR-Objekt zurück und mas mit dem .done() ist komplett richtig, da es auf der Promiseschnittstelle des jqXHR aufbaut.
OK, dann muss ich mich entschuldigen, war keine Absicht. Hab das Konstrukt noch nie wahrgenommen. Ist das quasi das selbe wie der success Parameter nur der Code ist weniger eingerückt? Wofür braucht man das?

Das mit dem synchron vs. asynchron ist natürlich trotzdem richtig, wobei man erwähnen könnte, dass man .ajax durch den asynch-Parameter synchron machen kann - was ich aber nicht empfehlen würde, da es den Browser einfirert.
Ja, deshalb hab ich es nur am Rande erwähnt.
 
OK, dann muss ich mich entschuldigen, war keine Absicht. Hab das Konstrukt noch nie wahrgenommen. Ist das quasi das selbe wie der success Parameter nur der Code ist weniger eingerückt? Wofür braucht man das?
Kein Problem - wollte nur darauf hinweisen. Hätte ja sonst auch einen Fehler in der Fehlerkonsole geworfen und nicht ein "undefined" alert.

Das Konstrukt ist recht praktisch, wenn man z.B. im onsuccess mehrere Dinge machen muss, diese aber trennen (verschiedener Scope) will. Dann kann man einfach mehrere .done() machen.
Auch kann es den Aufruf des AJAX mit der Weiterverarbeitung entkoppeln: wenn du z.B. verschiedene AJAX-Schnittstellen hast und dynamisch immer entscheidest, welche du ansprechen musst/willst, aber mit den Daten immer das gleiche machst, kannst du die Erzeugung des jqXHR in Abhängigkeit deiner Voraussetzungen machen, das .done() aber dann nur einmal für alle gleich setzen. Damit hast du weniger redundanten Code.
Ja, deshalb hab ich es nur am Rande erwähnt.
Das hatte ich jetzt wohl übersehen...
 
Zurück
Oben