2010-08-10 8 views
42

Mi chiedevo se è possibile memorizzare il ritorno JSON in un campo di input nascosto. Per esempio, questo è ciò che il mio ritorno JSON:store return json value in input hidden field

[{"id":"15aea3fa","firstname":"John","lastname":"Doe"}] 

vorrei memorizzare solo l'ID in un campo nascosto in modo da poter fare riferimento in un secondo momento di fare qualcosa con esso.

Esempio: io ho qualcosa di simile:

<input id="HiddenForId" type="hidden" value="" /> 

e vorrei jquery per restituire il valore più tardi per me in questo modo:

var scheduletimeid = $('#HiddenForId').val(); 
+0

lo vedono troppo: http://stackoverflow.com/questions/11118947/jquery-equivalent-for-json-stringify –

risposta

18

È possibile memorizzarlo in un campo nascosto OPPURE memorizzarlo in un oggetto javascript (la mia preferenza) poiché l'accesso probabile avverrà tramite javascript.

NOTA: poiché si dispone di un array, questo sarà quindi accessibile come myvariable[0] per il primo elemento (così come è).

EDIT spettacolo esempio:

clip... 
      success: function(msg) 
      { 
       LoadProviders(msg); 
      }, 
... 

var myvariable =""; 

function LoadProviders(jdata) 
{ 
    myvariable = jdata; 
}; 
alert(myvariable[0].id);// shows "15aea3fa" in the alert 

EDIT: Creato questa pagina: http://jsfiddle.net/GNyQn/ per dimostrare quanto sopra. In questo esempio si presuppone che siano già stati correttamente restituiti i valori della stringa con nome nell'array e che sia necessario archiviarlo per ogni domanda OP. Nell'esempio, ho anche messo i valori del primo array restituito (per esempio OP) in un div come testo.

Non sono sicuro del motivo per cui questo è stato visto come "complesso" in quanto non vedo un modo più semplice per gestire queste stringhe in questo array.

+0

dispari commenti sui voti fino a una soluzione praticabile. Ovviamente puoi anche inserire il valore in un campo nascosto con qualcosa come $ (myfieldselector) .val (myvalue); anche. Entrambi ho notato. La matrice è la ragione per cui ho scelto l'oggetto Javascript. –

+2

Ho votato perché è eccessivamente complesso. – Derrick

+0

JS è front-end e JSP è server. Cosa succede se si desidera impostare il lato server JSON solo perché non saranno accessibili nel front-end? Quindi, come conserverai JSON nei campi nascosti? – user2696258

-1

basta impostare il campo nascosto con javascript:

document.getElementById('elementId').value = 'whatever'; 

o mi manca qualcosa?

12

Se si utilizza il JSON Serializer, si può semplicemente memorizzare il vostro oggetto in formato stringa come tale

myHiddenText.value = JSON.stringify(myObject); 

È quindi possibile ottenere il valore indietro con

myObject = JSON.parse(myHiddenText.value); 

Tuttavia, se non sei andando a passare questo valore attraverso i submission della pagina, potrebbe essere più facile per te, e ti risparmierai un sacco di serializzazioni, se ti limitassi a una variabile javascript globale.

18

È possibile utilizzare input.value = JSON.stringify(obj) per trasformare l'oggetto in una stringa.
E quando ne avete bisogno di nuovo è possibile utilizzare obj = JSON.parse(input.value)

L'oggetto JSON è disponibile sui browser moderni oppure è possibile utilizzare la libreria json2.js da json.org

0

Sembra che il valore di ritorno è in un array? Questo è un po 'strano ... e anche essere consapevoli del fatto che alcuni browser consentiranno di essere analizzati da una richiesta interdominio (che non è vero quando si dispone di un oggetto JSON di primo livello).

In ogni caso, se questo è un involucro di array, si vorrà qualcosa di simile:

$('#my-hidden-field').val(theObject[0].id); 

in seguito sarà possibile recuperarlo attraverso un semplice .VAL() chiamata sullo stesso campo. Questo onestamente sembra piuttosto strano. Il campo nascosto non persisterà tra le richieste di pagina, quindi perché non lo mantieni nel proprio bucket di valore (pseudo-namespace)? Ad esempio,

$MyNamespace = $MyNamespace || {}; 
$MyNamespace.myKey = theObject; 

Questo lo renderà disponibile da qualsiasi luogo, senza alcuna gestione del campo di immissione degli hacker. È anche molto più efficiente rispetto alla modifica DOM per la semplice memorizzazione dei valori.

105

Anche se ho visto i metodi suggeriti usati e di lavoro, credo che l'impostazione del valore di un campo nascosto utilizzando solo il JSON.stringify rompe il codice HTML ...

Qui ti spiego cosa intendo:

<input type="hidden" value="{"name":"John"}"> 

come si può vedere il primo doppio apice dopo la parentesi a catena aperta potrebbe essere interpretato da alcuni browser come:

<input type="hidden" value="{" rubbish > 

Così, per un migliore approccio a questo ho suggerirei di utilizzare la funzione codecURIComponent. Insieme al JSON.stringify abbiamo shold abbiamo qualcosa di simile al seguente:

> encodeURIComponent(JSON.stringify({"name":"John"})) 
> "%7B%22name%22%3A%22John%22%7D" 

Ora che valore può essere immagazzinata in modo sicuro in un tipo nascosto di input in questo modo:

<input type="hidden" value="%7B%22name%22%3A%22John%22%7D"> 

o (meglio ancora) utilizzando la dati- attributo dell'elemento HTML manipolato dallo script che consumerà i dati, in questo modo:

<div id="something" data-json="%7B%22name%22%3A%22John%22%7D"></div> 

Ora per leggere i dati di nuovo siamo in grado di fare qualcosa di simile:

> var data = JSON.parse(decodeURIComponent(div.getAttribute("data-json"))) 
> console.log(data) 
> Object {name: "John"} 
+9

Questo è l'unico approccio da utilizzare se è necessario restituire oggetti complessi in un modulo POST. Dovrebbe essere la risposta accettata (perché la maggior parte delle persone che cercano e trovano questa domanda vogliono farlo esattamente). –

+0

La migliore soluzione finora, questa dovrebbe essere la risposta accettata. – digz6666

+1

Wow migliore soluzione Ho un problema con JSON.stringify per 2 ore, quindi ho trovato questa risposta di colpo di mente. Grazie. –

Problemi correlati