J'ai une fonction jQuery ajax et je voudrais soumettre un formulaire entier en tant que données de publication. Nous mettons constamment à jour le formulaire, il devient donc fastidieux de constamment mettre à jour les entrées de formulaire qui doivent être envoyées dans la demande.
155
Réponses:
Il y a une fonction qui fait exactement cela:
http://api.jquery.com/serialize/
la source
person[0].firstName
person[0].lastName
person[1].firstName
person[1].lastName
<input name="person[1].lastName">
?serialize () n'est pas une bonne idée si vous voulez envoyer un formulaire avec la méthode post. Par exemple, si vous voulez passer un fichier via ajax, cela ne fonctionnera pas.
Supposons que nous ayons un formulaire avec cet identifiant: "myform".
la meilleure solution est de créer un FormData et de l'envoyer:
la source
var
, en 2016!form.serialize()
mais cela ne fonctionnait tout simplement pas pour le téléchargement de fichiers.new FormData(this)
travaillé bienEn général,
serialize()
sur l'élément de formulaire.Veuillez noter que plusieurs options <select> sont sérialisées sous la même clé, par exemple
se traduira par une chaîne de requête qui comprend plusieurs occurrences du même paramètre de requête:
ce qui n'est peut-être pas ce que vous voulez dans le backend.
J'utilise ce code JS pour réduire plusieurs paramètres à une clé unique séparée par des virgules (copiée sans vergogne à partir de la réponse d'un commentateur dans un fil de discussion chez John Resig):
qui transforme ce qui précède en:
Dans votre code JS, vous l'appeleriez comme ceci:
J'espère que cela pourra aider.
la source
Utilisation
sérialiser ()
Sérialisez un formulaire en une chaîne de requête, qui pourrait être envoyée à un serveur dans une requête Ajax.
la source
Une bonne option jQuery pour ce faire est via FormData . Cette méthode est également adaptée lors de l'envoi de fichiers via un formulaire!
Votre fonction d'envoi dans jQuery ressemblerait à ceci:
pour ajouter des données à votre formulaire, vous pouvez soit utiliser une entrée masquée dans votre formulaire, soit l'ajouter à la volée:
la source
url: $(this).attr('action'),
placeIl vous suffit de publier les données. et Utilisation des paramètres de jeu de fonction jquery ajax. Voici un exemple.
la source
Les autres solutions n'ont pas fonctionné pour moi. Peut-être que l'ancien DOCTYPE du projet sur lequel je travaille empêche les options HTML5.
Ma solution:
js:
la source