Ich habe ein einfaches Formular mit remote = true.
Dieses Formular befindet sich in einem HTML-Dialogfeld, das geschlossen wird, sobald auf die Schaltfläche Senden geklickt wird.
Jetzt muss ich einige Änderungen an der Haupt-HTML-Seite vornehmen, nachdem das Formular erfolgreich gesendet wurde.
Ich habe dies mit jQuery versucht. Dies stellt jedoch nicht sicher, dass die Aufgaben nach einer Antwort auf die Formularübermittlung ausgeführt werden.
$("#myform").submit(function(event) {
// do the task here ..
});
Wie füge ich einen Rückruf hinzu, damit mein Code erst ausgeführt wird, nachdem das Formular erfolgreich gesendet wurde? Gibt es eine Möglichkeit, dem Formular einen .success- oder .complete-Rückruf hinzuzufügen?
Antworten:
Ich habe das gerade gemacht -
Und die Dinge haben perfekt funktioniert.
Weitere Einzelheiten finden Sie in dieser API-Dokumentation .
quelle
<form>
normalerweise eingereicht wird? (Ich meine nicht mit Ajax) Was kann ich in das erste Argument von setzen.bind()
? EDIT: Nun, ich denkeclick
. Nvm, sorry. : pIch konnte die Nummer eins der Upvoted-Lösungen nicht zuverlässig zum Laufen bringen, habe aber festgestellt, dass dies funktioniert. Ich bin mir nicht sicher, ob es erforderlich ist oder nicht, aber ich habe kein Aktions- oder Methodenattribut für das Tag, das sicherstellt, dass der POST von der $ .ajax-Funktion verarbeitet wird und Ihnen die Rückrufoption bietet.
quelle
$(this).serialize()
Zeile. Sie könnenjQuery.ajax()
damit das vorhandene Formular im Hintergrund senden, dann die Antwort vom Server abrufen und etwas damit tun..serialize
Ihre POSTed-Anforderung keine Dateieingaben enthält. Verwenden Sie stattdessen die HTML5 FormData (siehe diese Frage ), es sei denn, Sie unterstützen alte Browser wie IE <9$(this).serialize()
, es löste meine Probleme!Sie müssen die Dinge manuell mit einem AJAX-Aufruf an den Server erledigen. Dazu müssen Sie auch das Formular überschreiben.
Aber keine Sorge, es ist ein Kinderspiel. Hier ist eine Übersicht darüber, wie Sie mit Ihrem Formular arbeiten:
preventDefault
Methode verfügt).Zuerst müssen Sie die Formularübermittlungsaktion wie folgt abbrechen:
Und dann holen Sie sich den Wert der Daten. Nehmen wir einfach an, Sie haben ein Textfeld.
Und dann eine Anfrage abfeuern. Nehmen wir einfach an, es ist eine POST-Anfrage.
Und das sollte es ungefähr tun.
Hinweis 2: Zum Parsen der Formulardaten ist es vorzuziehen, ein Plugin zu verwenden . Es wird Ihr Leben wirklich einfach machen und eine nette Semantik liefern, die eine tatsächliche Aktion zum Senden von Formularen nachahmt.
Hinweis 2: Sie müssen keine Verzögerer verwenden. Es ist nur eine persönliche Präferenz. Sie können auch Folgendes tun, und es sollte auch funktionieren.
quelle
Für MVC war dies ein noch einfacherer Ansatz. Sie müssen das Ajax-Formular verwenden und die AjaxOptions festlegen
Hier ist der Übermittlungscode. Dieser befindet sich im Abschnitt "Dokument bereit" und verknüpft das Ereignis "onclick" der Schaltfläche mit dem Übermittlungsformular
Hier ist der Rückruf, auf den in den AjaxOptions verwiesen wird
In der Controller-Methode für MVC sieht es so aus
quelle
Ich glaube nicht, dass es eine Rückruffunktion wie die von Ihnen beschriebene gibt.
Was hier normal ist, ist, die Änderungen in einer serverseitigen Sprache wie PHP vorzunehmen.
In PHP können Sie beispielsweise ein verstecktes Feld aus Ihrem Formular abrufen und einige Änderungen vornehmen, wenn es vorhanden ist.
PHP:
Eine Möglichkeit, dies in Jquery zu tun, ist die Verwendung von Ajax. Sie können auf "Senden" hören, "false" zurückgeben, um das Standardverhalten abzubrechen, und stattdessen "jQuery.post ()" verwenden. jQuery.post hat einen Erfolgsrückruf.
http://api.jquery.com/jQuery.post/
quelle
Die "On Submit" -Handler des Formulars werden aufgerufen, bevor das Formular gesendet wird. Ich weiß nicht, ob es einen Handler gibt, der aufgerufen werden muss, nachdem das Formular gesendet wurde. Im herkömmlichen Sinne, der kein Javascript ist, wird die Seite durch das Senden des Formulars neu geladen.
quelle
quelle
ajaxForm()
eine Komponente eines Drittanbieters installiert? Es ist kein Standardbestandteil von jQuery.