2011-08-16 17 views
13

Ho una situazione come segue:Come posso conservare JavaScript oggetto array salvato in qualche modo che io possa utilizzare in seguito

Ho una pagina di selezione id dove l'utente può selezionare id dalle ids visualizzati sul pagina.Dopo l'utente seleziona l'id i li memorizza come un valore separato da virgole in un campo di input nascosto.

 <input type="hidden" values="234,678,987" /> 

Ho un pulsante che al clic fa apparire una finestra di dialogo che visualizza gli ID selezionati. Gli id ​​qui mostrati prendono dal campo nascosto. Ora ho un requisito per memorizzare l'id e il nome del prodotto. Probabilmente, in questo caso, cosa dovrei fare perché ora non riesco a salvare questa infrastruttura nel campo di input nascosto. Anche se utilizzo l'array javascript, come posso salvare quell'array e usarlo in futuro per la visualizzazione. È possibile salvare l'oggetto array nel campo di input nascosto .... e recuperarlo successivamente come oggetto array di nuovo ...?

+0

stai andando a pagine diverse sul tuo sito web? – vol7ron

+0

Memorizzalo in un cookie –

+0

sì..Vado a pagine diverse. – user882196

risposta

26

Ecco un JSFiddle.

Se si desidera memorizzare l'oggetto in un campo di input, è possibile utilizzare JSON.stringify():

//Pass your array (or JSON object) into JSON.stringify: 
JSON.stringify([{id:1, product_id: 2, name: 'stack'}, 
       {id: 2, product_id: 2, name: 'overflow'}]) 

che produrrà:

"[{"id":1,"product_id":2,"name":"stack"},{"id":2,"product_id":2,"name":"overflow"}]" 

È possibile memorizzare questo valore in un campo nascosto (o un attributo dati):

<input type="hidden" id="project" value="[{'id':1,'product_id':2,'name':'stack"',{'id':2,'product_id':2,'name':'overflow'}]" /> 

Ovviamente, è possibile combinare questi passaggi (o farlo tramite PHP/Rails/...)

$('#project').val(JSON.stringify([1,2,3])); 

È quindi possibile decodificare questo utilizzando, ad esempio, jQuery:

$.parseJSON($('#project').val()); 

Questo dovrebbe consentire di utilizzare il processo che si sta utilizzando, ma memorizzare oggetti JavaScript in i tuoi campi di input. Spero che questo ti aiuti!

+0

beh, questo sembra abbastanza buono, ma posso stringificare un oggetto array direttamente o iterare su tutto l'array e creare una sintassi come sopra e the stringify ... anche quale libreria devo includere nella pagina jsp per JSON.Stringify ... – user882196

+0

JSON.stringify fa parte di JavaScript ora. Sarai in grado di usarlo in modo nativo. Ci sono un sacco di librerie Javascript per l'analisi di JSON, jQuery ne ha una, ma ce ne sono molte altre. Inoltre, puoi stringificare un array, JSON si prenderà cura di questo appropriato. Dai un'occhiata a questo [JSFiddle] (http://jsfiddle.net/ghayes/cVxKx/4/) per gli esempi. – ghayes

+0

come posso creare questo formato [{id: 1, product_id: 2, nome: 'stack'}, {id: 2, product_id: 2, name: 'overflow'}]; – user882196

4

Puoi

  1. negozio il valore in memoria, utilizzando JS

    var arr = []; 
    arr.push(your_value); 
    
  2. continuare a creare nuovi attributi/valori nella dom utilizzando JS
  3. passare il valore da una pagina all'altra attraverso la stringa di query
  4. memorizza nuovamente il valore in un cookie
  5. memorizzare il valore sul server (in un file/db) per recuperare di nuovo

Nota:
Opzioni 3 e 5 sono significativi solo se si vuole andare a un'altra pagina (su il sito).
Le opzioni 4 e 5 sono buone se si desidera chiudere il browser e recuperare tali informazioni in un secondo momento.

+0

beh, sono interessato a memorizzare il valore in memoria .. – user882196

+0

dimmi di più sulla memorizzazione in memoria .. – user882196

+0

Non c'è altro da dire, quando si crea un array javascript viene memorizzato. Sarà distrutto solo se è stato creato all'interno di una funzione o se vai a una pagina diversa. In tal caso, è possibile esaminare l'invio della matrice al server per la gestione. –

4

Se non siete preoccupati per IE7, è possibile utilizzare localStorage:

window.localStorage.setItem('myArray', JSON.stringify([234,678,987])); 
// retrieve 
var myArray = JSON.parse(window.localStorage.getItem('myArray')); 

Il JSON è supportato dai browser moderni. Puoi aggiungerlo includendo json2.

+0

senza sapere quale piattaforma/framework sta usando sul server (se presente) questa sarebbe l'opzione migliore –

1

Suppongo che tu stia parlando di conservare i dati dopo che una nuova pagina è stata caricata. È possibile utilizzare l'approccio corrente di memorizzazione dei dati come stringa in un input nascosto, quindi analizzare la stringa successivamente in un oggetto JavaScript. Un'altra opzione è che il codice lato server può produrre alcuni JavaScript inline che dichiarano l'oggetto JavaScript necessario. Se stai usando ASP.NET, ad esempio, la pagina potrebbe avere qualcosa di simile:

// Assuming "serverSideIds" is declared as a List<string> 

<% var serializer = new JavaScriptSerializer(); %> 
var ids = <%= serializer.Serialize(serverSideIds) %>; 
Problemi correlati