Ihr Problem ist, dass diese Funktion in einem onsubmit
/ onclick
Event-Handler aufgerufen wird. AJAX ist asynchron, dh es läuft im Hintergrund. Wenn Sie $.post
aufrufen, wird der Code fortgesetzt und der Callback wird irgendwann in der Zukunft aufgerufen.
Was passiert, ist, dass das Formular gesendet wird, also wird die Seite umgeleitet. Dies geschieht, bevor der AJAX-Anruf beendet wird. Der alert
pausiert den Browser, sodass der AJAX-Aufruf beendet werden kann.
Sie müssen den Browser daran hindern, die "Standard" -Aktion auszuführen.
%Vor%P.S. Ich schlage vor, dass Sie Ereignishandler in JavaScript oder Inline-Handlern binden.
%Vor% Es funktioniert wahrscheinlich (oder die POST
ist in beiden Fällen fehlgeschlagen).
Um zu sehen, ob es wirklich funktioniert, sollte Ihre Warnung innerhalb des Callbacks sein - da dies der Code ist, der ausgeführt wird, wenn die Anfrage erfolgreich ist.
%Vor%Es lohnt sich immer, die Entwicklerwerkzeuge Ihres Browsers zu starten, um die Netzwerkanforderung zu sehen und zu überprüfen, ob sie funktioniert.
Dies hängt fast sicher mit der Tatsache zusammen, dass $.post
asynchron ausgeführt wird und Sie dies nicht korrekt berücksichtigen. Die alert
pausiert die Ausführung, wodurch Sie etwas Zeit für das Beenden von post
aufwenden, so dass alles, das später sein Ergebnis benötigt, tatsächlich Zugriff auf dieses Ergebnis haben kann. Durch das Entfernen von alert
wird diese Pause entfernt und alles, was auf diesen Nebeneffekt angewiesen ist, wird unterbrochen. (Mit anderen Worten, etwas, das das Ergebnis von post
benötigt, wird ausgeführt, bevor% code_de% beendet ist.)
Sie sollten jede Aktion ausführen, die auf den Ergebnissen von post
innerhalb des an sie übergebenen Callbacks beruht:
Sie sagen in einem Kommentar, dass Sie haben:
%Vor%In diesem Fall wird das Formular mit den üblichen Mitteln gebucht. Wenn Sie eine Warnung haben, kann der Ajax-Aufruf erfolgreich sein, aber ohne die Warnung verhindert die normale Formularübertragung wahrscheinlich den Ajax-Aufruf.
Sie sollten die Schaltfläche entweder so ändern, dass es sich nicht um eine "Senden" -Schaltfläche handelt:
%Vor%Oder verhindern Sie die normale Formularübergabe durch Rückgabe von false im "onclick":
%Vor%Der einfachste Weg wäre, Ihre jquery auszuführen, nachdem das DOM fertig geladen ist. Ich hatte auch ein ähnliches Problem. Fügen Sie einfach die Funktion hinzu, die innerhalb aufgerufen werden soll:
%Vor%Tags und Links javascript jquery function post