2010-11-16 6 views
17

J'ai besoin de définir un hachage pour poster des données ajax en utilisant jQuery. Le hachage ressemblera à quelque chose comme:comment affecter une valeur de variable en tant que nom de variable dans un hachage?

var setname = 'set_1'; 
elements = { set_1: {'beer','water','wine'} }; 

Le défi que je dois résoudre est « set-1 » (la clé des éléments Array) doit être dynamiquement nommé en fonction de la valeur de var setname.

Je veux éviter d'utiliser eval() bien sûr .. en PHP, il peut être fait en utilisant le double signe du dollar comme ceci: $$setname, mais quelle est la façon de le faire en JavaScript?

Répondre

29

Vous pouvez faire ce que vous souhaitez comme ceci:

var setname = 'set_1', elements = {}; 
elements[setname] = ['beer','water','wine']; 
alert(elements['set_1']); // beer,water,wine 

Voir en action à http://jsfiddle.net/x5KRD/.

Tous les objets JS sont accessibles en utilisant notation point (obj.method() ou obj.property), ou notation entre (obj['method']() ou obj['property']). L'utilisation de la notation de parenthèses vous permet de spécifier dynamiquement les noms de méthode/propriété/clé. Par exemple, bien que maladroite, window['alert']('hi') est équivalent à window.alert('hi'). Notez que votre code ne fonctionnera pas tel quel, car vous utilisez la notation littérale d'objet ({'beer','water','wine'}) pour contenir un tableau (il doit être placé entre crochets ['beer','water','wine'] à la place). Les littéraux d'objet doivent avoir des paires clé-valeur.

+0

vous avez raison .. mon erreur, c'était une version simplifiée éditée, j'ai en fait des paires de valeur de clé dans mon réel objet littéral. donc cela fonctionne bien, sauf pour l'attribution dynamique du nom de clé .. – mikkelbreum

+0

et je dois le faire en utilisant une note que jQuery.post() acceptera pour l'affichage des données POST .. – mikkelbreum

+0

@mikkelbreum J'ai clarifié de quoi je parlais. –

6
var setname = 'set_1', 
    elements = {}; 

elements[setname] = ['beer','water','wine']; 
2

Vous devez comprendre qu'il n'y a pas vraiment de "notation JSON" en Javascript - c'est de la notation Javascript native dont nous parlons. Ce que veut jQuery est une valeur Javascript pour les données POST, pas nécessairement une constante d'objet Javascript.

Ainsi, votre code préparera vos données POST comme ceci:

var elements = {}; 
elements[setName] = { /* something */ }; 
elements[somethingElse] = { /* something else */ }; 

et ainsi de suite. Lorsque vous êtes prêt à faire le POST, vous utiliseriez simplement des "éléments":

$.post(url, elements, function() { /* callback code */ }); 
Questions connexes