Javascript Funktion funktioniert nur wenn es eine Warnung gibt

8

Dieser Code führt post.php :

aus %Vor%

Aber wenn ich eine Zeile entferne, funktioniert das nicht:

%Vor%

Scheint irrational, aber warum passiert das?

Das PHP, das JS aufrufen sollte, fügt einige Werte in die Datenbank ein:

%Vor%     
Sebastian 28.01.2014, 20:39
quelle

5 Antworten

12

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%     
Rocket Hazmat 28.01.2014, 20:53
quelle
3

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.

    
Fenton 28.01.2014 20:41
quelle
1

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:

%Vor%     
Wayne Burkett 28.01.2014 20:43
quelle
1

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%     
John S 28.01.2014 20:56
quelle
1

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%     
user254153 04.10.2014 02:58
quelle

Tags und Links