Je me demande simplement s'il y a quelque chose de intégré à Javascript qui peut prendre un formulaire et renvoyer les paramètres de la requête, par exemple: "var1=value&var2=value2&arr[]=foo&arr[]=bar..."
Je me demande cela depuis des années.
javascript
string
forms
get
Liam
la source
la source
Réponses:
J'ai essayé de chercher une réponse à cette question il y a quelque temps, mais j'ai fini par écrire ma propre fonction qui extrait les valeurs du formulaire.
ce n'est pas parfait mais cela correspond à mes besoins.
form_params renvoie un mappage (clé -> valeur) des paramètres. l'entrée est l'élément de formulaire (élément DOM)
Il ne gère pas les champs permettant une sélection multiple.
la source
new Array()
pour initialiser un dictionnaire. Mais là encore, le code semble beaucoup plus propre que certaines des conneries que j'écrirais ces jours-ci!Mise à jour 2k20: utilisez la solution de Josh avec URLSearchParams.toString () .
Ancienne réponse:
Sans jQuery
Pour les navigateurs qui ne prennent pas en charge la syntaxe de la fonction de flèche qui nécessite ES5, remplacez la
.map...
ligne parla source
Si vous utilisez jQuery, vous voudrez peut-être consulter
jQuery.param()
http://api.jquery.com/jQuery.param/Exemple:
la source
$.param($('#myform').serializeArray())
.$('#myform').serialize()
jQuery !== JavaScript
jQuery.param()
ici github.com/jquery/jquery/blob/master/src/serialize.js :)someStr=value1&someObj[a]=5&someObj[b]=6&someArr[]=1&someArr[]=2
L'API URLSearchParams est disponible dans tous les navigateurs modernes. Par exemple:
la source
params.append(key, value)
plus tard pour ajouter de nouveaux paramètres de recherche dans des scénarios plus compliqués.x=null&y=undefined
const url = new URL("https://stackoverflow.com")
), vous pouvez définir ses chaînes de requêteurl.search = new URLSearchParams({foo: "bar"})
ouurl.searchParams.append("foo", "bar")
Cela ne répond pas directement à votre question, mais voici une fonction générique qui créera une URL contenant des paramètres de chaîne de requête. Les paramètres (noms et valeurs) sont échappés en toute sécurité pour être inclus dans une URL.
la source
new Array
pendant que vous l'utilisez réellement comme objet? o, OAvec jQuery, vous pouvez le faire en
$.param
la source
ES2017 (ES8)
Faire usage de
Object.entries()
, qui renvoie un tableau de[key, value]
paires d'objets . Par exemple, car{a: 1, b: 2}
il reviendrait[['a', 1], ['b', 2]]
. Il n'est pas pris en charge (et ne le sera pas) uniquement par IE.Code:
Exemple:
Résultat:
la source
Non, je ne pense pas que JavaScript standard ait cela intégré, mais Prototype JS a cette fonction (sûrement la plupart des autres frameworks JS en ont aussi, mais je ne les connais pas), ils l'appellent sérialiser .
Je peux recommander Prototype JS, cela fonctionne assez bien. Le seul inconvénient que j'ai vraiment remarqué c'est sa taille (quelques centaines de ko) et sa portée (beaucoup de code pour ajax, dom, etc.). Ainsi, si vous ne voulez qu'un sérialiseur de formulaires, c'est exagéré, et à proprement parler si vous ne voulez que la fonctionnalité Ajax (qui est principalement ce pour quoi je l'ai utilisé), c'est exagéré. À moins que vous ne soyez prudent, vous constaterez peut-être qu'il fait un peu trop de «magie» (comme étendre chaque élément dom qu'il touche avec les fonctions Prototype JS juste pour trouver des éléments), ce qui ralentit les cas extrêmes.
la source
querystring peut vous aider.
Afin que vous puissiez
la source
Si vous ne souhaitez pas utiliser de bibliothèque, cela devrait couvrir la plupart / tous les mêmes types d'éléments de formulaire.
la source
Vous n'avez pas besoin d'un formulaire pour le faire avec Prototype. Utilisez simplement la fonction Object.toQueryString :
la source
Vous pouvez le faire de nos jours avec
FormData
etURLSearchParams
sans avoir besoin de faire une boucle sur quoi que ce soit.Les navigateurs plus anciens auront cependant besoin d'un polyfill.
la source
Je ne suis pas tout à fait sûr moi-même, je me souviens avoir vu jQuery le faire dans une certaine mesure, mais il ne gère pas du tout les enregistrements hiérarchiques, et encore moins d'une manière conviviale php.
Une chose que je sais avec certitude, c'est que lorsque vous créez des URL et que vous collez le produit dans le dom, n'utilisez pas simplement du string-glue pour le faire, ou vous vous ouvrirez à un sauteur de page pratique.
Par exemple, certains logiciels publicitaires incorporent la chaîne de version de tout ce qui exécute votre flash. C'est bien quand sa chaîne simple générique adobe, mais cependant, c'est très naïf, et explose dans un désordre embarrassant pour les personnes qui ont installé Gnash, car la chaîne de version de gnash se trouve contenir une licence de droit d'auteur GPL complète, avec des URL et <a href> balises. En utilisant cela dans votre générateur d'annonceurs string-glue, la page s'ouvre et le HTML déséquilibré apparaît dans le dom.
La morale de l'histoire:
Ne pas:
Google doit apprendre cette astuce. J'ai essayé de signaler le problème, ils semblent s'en moquer.
la source
Comme le dit Stein, vous pouvez utiliser la bibliothèque prototype javascript de http://www.prototypejs.org . Incluez le JS et c'est très simple alors,
$('formName').serialize()
vous retournerez ce que vous voulez!la source
Pour ceux d'entre nous qui préfèrent jQuery, vous utiliserez le plugin de formulaire: http://plugins.jquery.com/project/form , qui contient une méthode formSerialize.
la source
Peut-être un peu redondant mais le moyen le plus propre que j'ai trouvé qui s'appuie sur certaines des réponses ici:
La source
la source
Ces réponses sont très utiles, mais je veux ajouter une autre réponse, qui peut vous aider à créer une URL complète. Cela peut vous aider concat de base
url
,path
,hash
etparameters
.Vous pouvez télécharger via npm https://www.npmjs.com/package/build-url
Démo:
la source
Je sais que c'est une réponse très tardive mais fonctionne très bien ...
note: object.entries renverra la clé, les paires de valeurs
J'espère que ça aide quelqu'un.
Codage heureux ...
la source
Il est probablement trop tard pour répondre à votre question.
J'avais la même question et je n'aimais pas continuer à ajouter des chaînes pour créer une URL. J'ai donc commencé à utiliser $ .param comme l' explique techhouse .
J'ai également trouvé une bibliothèque URI.js qui crée facilement les URL pour vous. Il y a plusieurs exemples qui vous aideront à : URI.js Documentation .
Voici l'un d'entre eux:
la source
la source