|
|||
[PROTOTYPE] Funktion erst beenden, wenn Ajax Aufruf abgeschlossen ist
Hallo,
ich bin gerade ein bisschen am Testen mit Prototype, weil die Materie für mich noch neu ist. Ich habe ein Login-Formular auf einer Seite und dieses wird mit Javascript abgeschickt und dann soll mit Ajax gecheckt werden, ob die Login.php "1" für Success und "0" für Failure ausgibt. Ich habe aber die Vermutung, dass die login(); Funktion schon beendet wird, ehe der Ajax Durchgang abgeschlossen ist. Meine Login Funktion sieht so aus: Code:
function login() { new Ajax.Request('login.php', { method:'post', parameters: $('login_form').serialize(true), onSuccess: function(transport){ var response = transport.responseText || "no response text"; if(response==1) { return("LOGGED IN"); } else { return("NOT IN"); } }, onFailure: function(){ alert('Something went wrong...') } }); } Code:
<form id="login_form" method="POST" onSubmit="return check()"> [...] function check() { var LoggedIn=login(); document.getElementById('test_ausgabe').innerHTML=LoggedIn; if(LoggedIn=="NO") { //fehler meldung return(false); } if(LoggedIn=="YES") { // alles ok } } Deswegen habe ich die Vermutung, dass die login(); Funktion schon beendet wird, ehe der Ajax Durchgang abgeschlossen ist. Liege ich da richtig oder habe ich da irgendwo anders einen anderen Fehler eingebaut? Wäre nett, wenn mir da jemand auf die Sprünge helfen kann. Viele Grüße naitsab |
Sponsored Links |
|
|||
Gib dem AJAX-Request eine Zufallszahl mit. Diese muss der AJAX-Request dann auch wieder zurück liefern. Prüfe dann gleichzeitig in einer weiteren Funktion regelmäßig (z.B. alle 500ms), ob diese Zufallszahl nun schon zurückgegeben wurde. Solange es hier keine Antwort gibt wird das Formular auch nicht abgeschickt.
Soweit die Theorie. Ich habe das beim SAJAX schon hinbekommen. Wie es bei Prototype geht weiß ich nicht. |
Sponsored Links |
|
|||
Zitat:
Insofern ist das ganz logisch: Was du synchron lösen willst, wird tatsächlich mit Event-basiert mit Callback-Funktionen gemacht. Deine Funktion login hat nie ein Rückgabewert und du kommst auch in der login-Funktion nicht an den Rückgabewert der onSuccess-Callback-Funktion. Mach dir diesen asynchronen Ablaf bewusst: Wenn du einen Ajax-Request erzeugst, wird der im Hintergrund ausgeführt. Dein Programm läuft weiter und wartet nicht auf die Antwort. Wenn die Serverantwort ankommt, wird die onSuccess-Callback-Funktion gefeuert. Erst darin kannst du das ausführen, was getan werden soll, wenn der Loginstatus bekannt ist. Zitat:
Was du stattdessen tun kannst: Code:
onsubmit="login(); return false" Folgendes schreibst du dann in den onSuccess-Callback: Code:
if (response == "1") { // Formular per JS absenden, wenn alles okay ist document.forms.formular.submit(); } else { alert("fehlermeldung"); } |
|
|||
molily, vielen Dank für die ausführliche und verständliche Antwort!
Gut zu wissen, dass die Ajax Aufrufe asynchron ablaufen. Das hätte ich mir beim Namen zwar auch denken können, aber über sowas denkt man wohl nicht nach, wenn man mitten in einer Problemlösung steckt |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Jquery AJAX Aufruf und Tablesorter | MoFu | Javascript & Ajax | 2 | 18.09.2009 10:09 |
[PHP] Funktion zum Optimieren von CSS | Floele | Serveradministration und serverseitige Scripte | 2 | 13.08.2005 11:31 |