2010-11-16 17 views
17

Devo definire un hash per la pubblicazione di alcuni dati Ajax usando jQuery. L'hash sarà simile:come assegnare un valore variabile come nome variabile in un hash?

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

La sfida che ho bisogno di risolvere è 'set-1' (la chiave di elementi array) deve essere denominato in modo dinamico in base al valore di var setname.

voglio evitare di usare eval() ovviamente .. in PHP può essere fatto utilizzando il doppio segno di dollaro in questo modo: $$setname, ma qual è il modo per fare questo in JavaScript?

risposta

29

Si può fare ciò che si desidera in questo modo:

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

vedere in azione a http://jsfiddle.net/x5KRD/.

Tutti gli oggetti in JS è possibile accedere utilizzando notazione del punto (obj.method() o obj.property), o staffa notazione (obj['method']() o obj['property']). L'uso della notazione della parentesi ti consente di specificare in modo dinamico i nomi di metodo/proprietà/chiave.

Ad esempio, mentre impacciato, window['alert']('hi') equivale a window.alert('hi').

Nota che il codice non funziona così com'è, in ogni modo, perché si sta utilizzando la notazione oggetto letterale ({'beer','water','wine'}) per contenere un array (che dovrebbe essere tra parentesi quadre ['beer','water','wine'] invece). I letterali degli oggetti devono avere coppie di valori-chiave.

+0

hai ragione .. il mio errore, che era una versione semplificata modificata, in realtà ho coppie chiave valore nel mio effettivo oggetto letterale. quindi funziona bene tranne per l'assegnazione dinamica del nome della chiave .. – mikkelbreum

+0

e ho bisogno di farlo usando una nota che jQuery.post() accetterà per la pubblicazione dei dati POST .. – mikkelbreum

+0

@mikkelbreum Ho chiarito di cosa stavo parlando. –

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

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

Devi capire che non c'è davvero niente come "notazione JSON" in Javascript - è una notazione JavaScript nativa di cui stiamo parlando. Quello che jQuery vuole è un valore Javascript per i dati POST, non necessariamente una costante oggetto Javascript.

Così, il codice sarà preparare i dati post come questo:

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

e così via. Quando sei pronto per fare il POST, devi semplicemente usare "elementi":

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