2010-08-10 18 views
42

Me preguntaba si es posible almacenar el json de devolución en un campo de entrada oculto. Por ejemplo, esto es lo que mi regreso JSON:valor de json de devolución de la tienda en el campo oculto de entrada

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

me gustaría simplemente almacenar el identificador en un campo oculto para que pueda hacer referencia a ella más tarde para hacer algo con él.

Ejemplo: Tengo algo como esto:

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

y me gustaría jQuery para devolver el valor más adelante para mí de esta manera:

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

ver también: http://stackoverflow.com/questions/11118947/jquery-equivalent-for-json-stringify –

Respuesta

18

se puede almacenar en un campo oculto, o almacenarlo en un objeto de JavaScript (mi preferencia) como el probable acceso será a través de JavaScript.

NOTA: dado que tiene una matriz, esto sería visitada entonces como myvariable[0] para el primer elemento (como lo tienes).

EDITAR espectáculo ejemplo:

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

var myvariable =""; 

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

EDIT: Esta página fue creada: http://jsfiddle.net/GNyQn/ para demostrar lo anterior. Este ejemplo supone que ya ha devuelto correctamente sus valores de cadena con nombre en la matriz y simplemente necesita almacenarlo por cada pregunta OP. En el ejemplo, también puse los valores de la primera matriz devuelta (por ejemplo OP) en un div como texto.

No estoy seguro de por qué esto ha sido visto como "complejo" como veo ninguna manera más simple de manejar estas cadenas en esta matriz.

+0

extraña no hay comentarios sobre los votos hacia abajo a una solución viable. Obviamente también puede poner el valor en un campo oculto con algo como $ (myfieldselector) .val (myvalue); también. Ambos de los cuales noté. La matriz es la razón por la que elegí el objeto Javascript. –

+2

Lo voté porque es demasiado complejo. – Derrick

+0

JS es el front-end, y JSP es el servidor. ¿Qué sucede si desea establecer el lado json del servidor solo porque no será accesible en el frente? Entonces, ¿cómo va a almacenar JSON en campos ocultos? – user2696258

-1

apenas se fija el campo oculto con javascript:

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

o hacer he perdido algo?

12

Si utiliza el JSON Serializer, sólo tiene que almacenar su objeto en formato de cadena como tal

myHiddenText.value = JSON.stringify(myObject); 

A continuación, puede obtener el valor de vuelta con

myObject = JSON.parse(myHiddenText.value); 

Sin embargo, si no estás va a pasar este valor a través de los envíos de la página, podría ser más fácil para usted, y se ahorrará una gran cantidad de serialización, si lo guarda como una variable global de javascript.

18

Puede utilizar input.value = JSON.stringify(obj) para transformar el objeto en una cadena.
Y cuando lo necesite volver puede utilizar obj = JSON.parse(input.value)

El objeto JSON está disponible en los navegadores modernos o puede utilizar la biblioteca de json2.js json.org

0

Parece que el valor de retorno es en una matriz? Eso es algo extraño ... y también tenga en cuenta que ciertos navegadores permitirán que se analice a partir de una solicitud entre dominios (lo que no es cierto cuando se tiene un objeto JSON de nivel superior).

De todos modos, si eso es un envoltorio matriz, usted querrá algo como esto:

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

Más tarde, puede recuperarlo a través de una sencilla .val() llamar en el mismo campo. Sin embargo, esto parece realmente extraño. El campo oculto no persistirá en las solicitudes de página, así que ¿por qué no lo guardas en tu propio cubo de valores (pseudo-namespaced)? Por ejemplo,

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

Esto lo pondrá a su disposición desde cualquier lugar, sin ninguna administración de campo de entrada hacky. También es mucho más eficiente que hacer modificaciones DOM para almacenamiento de valor simple.

105

Aunque he visto los métodos sugeridos utilizados y de trabajo, creo que la fijación del valor de un campo oculto sólo con el JSON.stringify rompe el HTML ...

Aquí voy a explicar lo que quiero decir:

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

como se puede ver la primera cita doble después del corchete de cadena abierta podría ser interpretado por algunos navegadores como:

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

Así que para un mejor acercamiento a este I sugeriría utilizar la función encodeURIComponent. Junto con el JSON.stringify que únicamente deben tener algo como lo siguiente:

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

Ahora ese valor se puede almacenar de forma segura en un tipo de entrada oculta de este modo:

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

o (aún mejor), utilizando el Data- atributo del elemento HTML manipulado por el guión que consumirá los datos, así:

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

Ahora para leer los datos de nuevo podemos hacer algo como:

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

Este es el único enfoque que se debe usar si necesita devolver objetos complejos en una forma POST. Debería ser la respuesta aceptada (porque la mayoría de las personas que buscan y encuentran esta pregunta desean hacer exactamente eso). –

+0

La mejor solución hasta el momento, esta debe ser aceptada. – digz6666

+1

Wow, la mejor solución Tengo un problema con JSON.stringify por 2 horas y luego encontré esta respuesta alucinante. Gracias. –

Cuestiones relacionadas