Ich habe eine jQuery-Ajax-Funktion und möchte ein ganzes Formular als Post-Daten senden. Wir aktualisieren das Formular ständig, so dass es mühsam wird, die Formulareingaben, die in der Anfrage gesendet werden sollen, ständig zu aktualisieren.
155
Antworten:
Es gibt eine Funktion, die genau das tut:
http://api.jquery.com/serialize/
quelle
person[0].firstName
person[0].lastName
person[1].firstName
person[1].lastName
<input name="person[1].lastName">
?serialize () ist keine gute Idee, wenn Sie ein Formular mit der Post-Methode senden möchten. Wenn Sie beispielsweise eine Datei über Ajax übergeben möchten, funktioniert dies nicht.
Angenommen, wir haben ein Formular mit dieser ID: "myform".
Die bessere Lösung besteht darin, FormData zu erstellen und zu senden:
quelle
var
im Jahr 2016!form.serialize()
aber es funktionierte einfach nicht für das Hochladen von Dateien.new FormData(this)
hat gut funktioniertIm Allgemeinen
serialize()
für das Formularelement verwenden.Bitte beachten Sie, dass mehrere <select> -Optionen unter demselben Schlüssel serialisiert werden, z
führt zu einer Abfragezeichenfolge, die mehrere Vorkommen desselben Abfrageparameters enthält:
Das ist möglicherweise nicht das, was Sie im Backend wollen.
Ich verwende diesen JS-Code, um mehrere Parameter auf einen durch Kommas getrennten Einzelschlüssel zu reduzieren (schamlos kopiert von der Antwort eines Kommentators in einem Thread bei John Resig):
das macht das oben genannte in:
In Ihrem JS-Code würden Sie es so nennen:
Hoffentlich hilft das.
quelle
Verwenden
serialize ()
Serialisieren Sie ein Formular in eine Abfragezeichenfolge, die in einer Ajax-Anforderung an einen Server gesendet werden kann.
quelle
Eine gute jQuery-Option hierfür ist FormData . Diese Methode eignet sich auch zum Senden von Dateien über ein Formular!
Ihre Sendefunktion in jQuery würde folgendermaßen aussehen:
Um Ihrem Formular Daten hinzuzufügen, können Sie entweder eine versteckte Eingabe in Ihrem Formular verwenden oder diese im laufenden Betrieb hinzufügen:
quelle
url: $(this).attr('action'),
stattdessenSie müssen nur die Daten posten. und Verwenden von jquery ajax-Funktionssatzparametern. Hier ist ein Beispiel.
quelle
Die anderen Lösungen haben bei mir nicht funktioniert. Vielleicht verhindert der alte DOCTYPE in dem Projekt, an dem ich arbeite, HTML5-Optionen.
Meine Lösung:
js:
quelle