jQuery request.done keine überspeicherung

05/17/2013 22:03 MrPuschel#16
Quote:
Originally Posted by mydoom View Post
Du kannst ja mal zum Spaß ne Endlosschleife in js starten und dir ansehen was passiert. Warum sollte man nicht einfach alles in der Callback-Funktion bearbeiten?
Was hat eine Endlosschleife mit einem request zu tun? Irgendwann bekommst du ein 404 oder der Browser wirft einen timeout.

Was die Frage angeht, weil du Inhalte brauchst bevor das script weiterläuft. Wie gesagt, kann vorkommen. Nicht unbedingt gutes Design aber ich hatte schon mehrere Fälle wo ich es tun musste weil alles andere zu aufwändig gewesen wäre.
05/18/2013 14:07 Muddy Waters#17
Ich versuche mal wieder zurück zum eigentlichen Problem zu kommen. Scheinbar scheint es hier einfach noch etwas am Verständnis für AJAX-Requests zu fehlen.

Ich würde dir empfehlen, für den Anfang erstmal auf Abkürzungen wie $.post() zu verzichten und einfach $.ajax() zu verwenden, denn dabei ist viel klarer, was du eigentlich tust. Ohne den genauen Kontext zu kennen, würde ich pauschal erstmal davon ausgehen, dass du hier kein synchrones Request benötigst.

Wenn der Nutzer auf asynchron geladene Inhalte wartet, blendet man gerne irgendein animiertes Status Bild ein, welches dann, nachdem die Inhalte vorliegen, wieder ausblendet. Hier mal ein kurzes Beispiel dazu auf Basis deines ersten Beispiels:
Code:
var test = 'TestString';

// Status img anzeigen
$('#some_status_img').show();
$.ajax({
	url: 'controller/Save_Col.php',
	data: dataToSend,
	dataType: 'json',
	type: 'POST',
	success: function(data)	{
		// AJAX-Request abgeschlossen, data enthält den bereits geparsten JSON-String
		
		// Status img ausblenden
		$('#some_status_img').hide();
		test = data.msg;
		console.log("TestVariable_Done: " + test); //MsgString
	}
});
// AJAX-Request ist hier noch nicht abgeschlossen, der nachfolgende Aufruf ergibt den Wert, mit dem test initialisiert worden ist
console.log("TestVariable: " + test); //TestString sollte jedoch MsgString sein
Du musst dir einfach abgewöhnen, hierbei prozedural zu denken und stattdessen in Callbacks denken.
Man kann sich das ein bisschen mit Dominosteinen verdeutlichen: Während du bei einem prozeduralen Script z.B. 100 Steine in einer Reihe hast, die alle nacheinander umfallen, wenn du den ersten umstößt, sieht die Sache bei verwendung asynchroner Requests mit Auswertung über Callback-Funktionen etwas anders aus. Hier hättest du für das vorherige Beispiel etwa 4 seperate Reihen à 25 Steine, wobei die nächte Reihe immer erst dann angestoßen wird, wenn die durch die erste Reihe gestartete Aktion abgeschlossen ist.
05/18/2013 14:43 Ravenstorm#18
Quote:
Originally Posted by Muddy Waters View Post
Ich versuche mal wieder zurück zum eigentlichen Problem zu kommen. Scheinbar scheint es hier einfach noch etwas am Verständnis für AJAX-Requests zu fehlen.

Ich würde dir empfehlen, für den Anfang erstmal auf Abkürzungen wie $.post() zu verzichten und einfach $.ajax() zu verwenden, denn dabei ist viel klarer, was du eigentlich tust. Ohne den genauen Kontext zu kennen, würde ich pauschal erstmal nicht davon ausgehen, dass du hier kein synchrones Request benötigst.

Wenn der Nutzer auf asynchron geladene Inhalte wartet, blendet man gerne irgendein animiertes Status Bild ein, welches dann, nachdem die Inhalte vorliegen, wieder ausblendet. Hier mal ein kurzes Beispiel dazu auf Basis deines ersten Beispiels:
Code:
var test = 'TestString';

// Status img anzeigen
$('#some_status_img').show();
$.ajax({
	url: 'controller/Save_Col.php',
	data: dataToSend,
	dataType: 'json',
	type: 'POST',
	success: function(data)	{
		// AJAX-Request abgeschlossen, data enthält den bereits geparsten JSON-String
		
		// Status img ausblenden
		$('#some_status_img').hide();
		test = data.msg;
		console.log("TestVariable_Done: " + test); //MsgString
	}
});
// AJAX-Request ist hier noch nicht abgeschlossen, der nachfolgende Aufruf ergibt den Wert, mit dem test initialisiert worden ist
console.log("TestVariable: " + test); //TestString sollte jedoch MsgString sein
Du musst dir einfach abgewöhnen, hierbei prozedural zu denken und stattdessen in Callbacks denken.
Man kann sich das ein bisschen mit Dominosteinen verdeutlichen: Während du bei einem prozeduralen Script z.B. 100 Steine in einer Reihe hast, die alle nacheinander umfallen, wenn du den ersten umstößt, sieht die Sache bei verwendung asynchroner Requests mit Auswertung über Callback-Funktionen etwas anders aus. Hier hättest du für das vorherige Beispiel etwa 4 seperate Reihen à 25 Steine, wobei die nächte Reihe immer erst dann angestoßen wird, wenn die durch die erste Reihe gestartete Aktion abgeschlossen ist.
Ich danke dir für die genau erklärung dahinter, das Problem hinter all dem war scheinbar das Verständnis meiner Seits in der Umstellung von $.ajax() auf $.post(), da ich davor immer nur $.ajax nutzte.

Das Problem hat sich gelöst, danke vielmals :)