jQuery: event.preventDefault innerhalb eines GET oder POST Requests setzen
Frage von Axuter | 10.11.2011 um 13:52
Ich habe eine Submit-Form auf einer Seite, die nur dann abgeschickt werden soll, wenn eine bestimmte Bedingung erfüllt ist.
Das Problem ist, dass diese Bedingung zum Zeitpunkt der Ausführung des Skripts noch nicht feststeht, weswegen ich sie mit einem jQuery .get() oder .post() nachladen möchte. Je nachdem, was das Ergebnis dieses Nachladens ist, soll ein event.preventDefault gesetzt werden, um das Abschicken zu verhindern, oder nicht.
Bisher habe ich folgenden JavaScript Code erarbeitet:
$("#formid").submit(function(event){ // request: $.post("script.php",$(this).serialize(),function(msg){ // bei bestimmtem Inhalt Submit verhindern if (msg=='xx') event.preventDefault(); }); });
Nun gibt es aber ein Problem: Das ganze funktioniert einfach nicht und ich habe keine Ahnung wieso! Wenn ich das prevenDefault außerhalb der POST (oder auch GET Abfrage, ich habe beides probiert), setze, dann funktioniert es tadellos. Aber ich brauche es ja innerhalb des POST oder GET-Requests, da ja hier die Bedingung gestellt wird.
Kann mir jemand helfen und mir einen Lösungsansatz geben?
Ähnliche Themen
jQuery: Unterschied zwischen "return false" und "event.preventDefault()"
Info | 0 Kommentare
jQuery: Tasten auf Tastatur Aktion zuweisen (Keyboard Event)
Tipp | 0 Kommentare
Delphi: Event Reihenfolge einer Form - Von OnCreate bis OnDestroy
Info | 1 Kommentar
Android Programmierung: Response von HTTP POST Request empfangen
Tutorial | 3 Kommentare
JavaScript: Submit einer Form abfangen
Tutorial | 0 Kommentare
jQuery: Komplettes Formular abschicken und Inhalt mit Ajax empfangen
Tutorial | 12 Kommentare
jQuery: event.preventDefault() rückgängig machen
Frage | 2 Antworten
Wichtiger Hinweis
Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.
Jetzt mitmachen
Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.
Probiere es einfach mal mit folgendem Lösungsansatz, indem du den .post()-Request in einen .ajax()-Request umwandelst und dabei async auf false setzt:
Der .post()-Request von jQuery läuft nämlich asynchron ab. Das bedeutet, das eigentliche Skript wird weiter abgearbeitet, während die POST oder GET Abfarge gesendet wird.
Dadurch ist das Formular schon längst abgesendet, bevor unsere Daten ankommen würden und der preventDefault Befehl kommt gar nicht dazu ausgeführt zu werden.
Verwenden wir stattdessen .ajax(), können wir selbst bestimmen, ob die Anfrage asynchron durchgeführt werden soll oder nicht. Wenn wir async auf false setzen, wird der POST-Request erst durchgeführt - erst anschließend wird der Code weiter abgearbeitet. Auf die Daten wird also gewartet und preventDefault hat genug Zeit um ausgeführt zu werden.
12.11.2011 um 19:35