Connaissez-vous un moyen rapide et simple d'encoder un objet Javascript dans un objet string
que je peux transmettre via une GET
requête?
Non jQuery
, pas d'autres cadres - juste du Javascript simple :)
javascript
query-string
urlencode
napolux
la source
la source
URLSearchParams
maintenant ...Réponses:
comme ça?
Edit: celui-ci convertit également les objets récursifs (en utilisant la notation "tableau" php pour la chaîne de requête)
la source
jQuery a une fonction pour cela,
jQuery.param()
si vous l'utilisez déjà, vous pouvez l'utiliser: http://api.jquery.com/jquery.param/exemple:
str
contient maintenantwidth=1680&height=1050
la source
var a = []; a[5] = 'foo'; jQuery.param({ parameters: a });
Résultats en"parameters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=¶meters[]=foo"
. Ce qui, bien que correct, peut ne pas être ce que vous attendez.Utilisez simplement
URLSearchParams
ceci fonctionne dans tous les navigateurs actuelsla source
let j = { m: 5, n: { k: 1 } }; new URLSearchParams(j).toString(); // result "m=5&n=%5Bobject+Object%5D"
stringify
les objets imbriqués avant de pouvoirURLSearchParams
Edit: J'aime ce one-liner, mais je parie que ce serait une réponse plus populaire s'il correspondait sémantiquement à la réponse acceptée:
la source
Object.keys(obj).map(k => k + '=' + encodeURIComponent(obj[k])).join('&')
Object.keys
n'est disponible que dans IE> = 9Object.keys(obj).map(k => `${k}=${encodeURIComponent(obj[k])}`).join('&')
Object.entries(obj).map(e => e.map(ee => encodeURIComponent(ee)).join('=')).join('&');
Voici une doublure dans ES6:
la source
export?actions[]=finance,create,edit
quand il aurait dû,export?actions[]=finance&actions[]=create&actions[]=edit
comme c'est la norme horrible.actions[]
est la notation PHP; Django utilise plusieurs à laaction
place (pas de[]
suffixe); certains autres ORM / CMS nécessitent des listes séparées par des virgules, etc. Donc "si ce ne sont pas de simples chaînes, assurez-vous d'abord de savoir ce que votre serveur veut même".Avec Node.js v6.6.3
Référence: https://nodejs.org/api/querystring.html
la source
Je suggère d'utiliser l'
URLSearchParams
interface:Ou en passant l'objet de recherche au constructeur comme ceci:
la source
Un petit amendement à la solution acceptée par user187291:
La vérification de hasOwnProperty sur l'objet rend JSLint / JSHint heureux et empêche les méthodes de sérialisation accidentelles de l'objet ou d'autres choses si l'objet n'est rien d'autre qu'un simple dictionnaire. Voir le paragraphe sur pour les déclarations sur cette page: http://javascript.crockford.com/code.html
la source
Eh bien, tout le monde semble mettre son one-liner ici alors voici le mien:
la source
Avez-vous besoin d'envoyer des objets arbitraires? Si c'est le cas, GET est une mauvaise idée car il existe des limites à la longueur des URL que les agents utilisateurs et les serveurs Web acceptent. Ma suggestion serait de créer un tableau de paires nom-valeur à envoyer, puis de créer une chaîne de requête:
la source
Rails / PHP Style Query Builder
Cette méthode convertit un objet Javascript en un
URI Query String
. Gère également les tableaux et objets imbriqués (dansRails
/PHP
syntaxe):Exemple d'utilisation:
la source
function
pour exclure lesfalsy
valeurs (null, undefined, NaN, '') ...utilisez JSON.
jetez un oeil à cette question pour des idées sur la façon de mettre en œuvre.
la source
Voici la version coffeescript de la réponse acceptée. Cela pourrait faire gagner du temps à quelqu'un.
la source
Voici une version concise et récursive avec Object.entries . Il gère les tableaux imbriqués arbitrairement, mais pas les objets imbriqués. Il supprime également les éléments vides:
Par exemple:
la source
Celui-ci ignore les valeurs nulles / non définies
la source
Dans ES7, vous pouvez écrire ceci sur une seule ligne:
la source
Une seule ligne pour convertir l'objet en chaîne de requête au cas où quelqu'un en aurait encore besoin
la source
J'ai une solution plus simple qui n'utilise aucune bibliothèque tierce et est déjà apte à être utilisée dans n'importe quel navigateur qui a "Object.keys" (aka tous les navigateurs modernes + edge + ie):
Dans ES5
Dans ES3
la source
Si vous souhaitez convertir un objet imbriqué de manière récursive et que l'objet peut ou non contenir des tableaux (et que les tableaux peuvent contenir des objets ou des tableaux, etc.), la solution devient un peu plus complexe. Ceci est ma tentative.
J'ai également ajouté quelques options pour choisir si vous souhaitez enregistrer pour chaque membre d'objet à quelle profondeur dans l'objet principal il se trouve, et pour choisir si vous souhaitez ajouter une étiquette aux membres provenant de tableaux convertis.
Idéalement, vous devriez tester si le paramètre de chose reçoit vraiment un objet ou un tableau.
la source
Addition pour solution acceptée, cela fonctionne avec des objets et un tableau d'objets:
Vous avez également ajouté objName si vous utilisez des paramètres d'objet comme dans les méthodes d'action asp.net mvc.
la source
Un peu mieux
la source
J'ai fait une comparaison des stringifiers JSON et les résultats sont les suivants:
La plus courte d'entre elles est la notation d'objet URL .
la source
ok, c'est un post plus ancien mais je suis confronté à ce problème et j'ai trouvé ma solution personnelle .. peut peut-être aider quelqu'un d'autre ..
la source
Les réponses ci-dessus ne fonctionnent pas si vous avez beaucoup d'objets imbriqués. Au lieu de cela, vous pouvez choisir le paramètre de fonction ici - https://github.com/knowledgecode/jquery-param/blob/master/jquery-param.js Cela a très bien fonctionné pour moi!
la source
SOLUTION ES6 POUR LE CODAGE DE CHAÎNE DE REQUÊTE D'UN OBJET JAVASCRIPT
la source
Il s'agit d'une solution qui fonctionnera pour les backends .NET prêts à l'emploi. J'ai pris la réponse principale de ce fil et l'ai mise à jour pour répondre à nos besoins .NET.
la source
J'ai écrit un paquet juste pour ça: chaîne de requête d'objet :)
Prend en charge les objets imbriqués, les tableaux, les fonctions d'encodage personnalisées, etc. Léger et sans jQuery.
Retour
la source
Juste une autre façon (pas d'objet récursif):
la source
Reportez-vous à la réponse @ user187291, ajoutez "isArray" comme paramètre pour effectuer la conversion du tableau imbriqué json.
Pour faire le résultat:
staffId = 00000001 & Detail [0] .identityId = 123456 & Detail [1] .identityId = 654321
la source
Vous pouvez également y parvenir en utilisant du JavaScript simple .
la source