J'ai une fonction ajax jQuery et je voudrais un formulaire entier en tant que données post. Nous mettons constamment à jour le formulaire, il est donc fastidieux de mettre à jour en permanence les entrées de formulaire à envoyer dans la requête.
Réponses
Trop de publicités?Il y a une fonction qui fait exactement ceci:
http://docs.jquery.com/Ajax/serialize
var data = $('form').serialize();
$.post('url', data);
En général utiliser serialize()
sur l'élément de formulaire.
S'il vous plaît être conscient que plusieurs de <select> options sont sérialisés en vertu de la même clé, par exemple
<select id="foo" name="foo" multiple="multiple">
<option value="1">one</option>
<option value="2">two</option>
<option value="3">three</option>
</select>
le résultat sera une chaîne de requête qui contient plusieurs occurrences de la même paramètre de requête:
[path]?foo=1&foo=2&foo=3&someotherparams...
qui peut ne pas être ce que vous voulez dans le backend.
J'ai utiliser ce code JS pour réduire de plusieurs paramètres séparés par une virgule clé unique (copié sans vergogne à partir d'un commentaire de réponse dans un fil plus au John Resig):
function compress(data) {
data = data.replace(/([^&=]+=)([^&]*)(.*?)&\1([^&]*)/g, "$1$2,$4$3");
return /([^&=]+=).*?&\1/.test(data) ? compress(data) : data;
}
qui tourne le ci-dessus en:
[path]?foo=1,2,3&someotherparams...
Dans votre code JS vous souhaitez appeler comme ceci:
var inputs = compress($("#your-form").serialize());
Espérons que cela aide.