web-dev-qa-db-fra.com

stocker la valeur json de retour dans le champ caché d'entrée

Je me demandais s'il était possible de stocker le retour json dans un champ de saisie caché. Par exemple, voici ce que mon json retourne:

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

Je voudrais simplement stocker l'identifiant dans un champ caché afin de pouvoir le référencer plus tard pour en faire quelque chose.

Exemple: j'ai quelque chose comme ceci:

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

et je voudrais que jquery me retourne la valeur plus tard comme ceci:

var scheduletimeid = $('#HiddenForId').val();
45
hersh

Vous pouvez le stocker dans un champ caché, OR le stocker dans un objet javascript (ma préférence) car l'accès probable se fera via javascript.

REMARQUE: puisque vous avez un tableau, celui-ci serait alors accessible en tant que myvariable[0] pour le premier élément (tel que vous l'avez).

Exemple d'exposition EDIT:

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

var myvariable ="";

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

EDIT: a créé cette page: http://jsfiddle.net/GNyQn/ pour illustrer ce qui précède. Cet exemple suppose que vous avez déjà correctement renvoyé vos valeurs de chaîne nommées dans le tableau et que vous devez simplement les stocker par question OP. Dans l'exemple, j'ai également mis les valeurs du premier tableau retourné (par exemple OP) dans un div en tant que texte.

Je ne sais pas pourquoi cela a été considéré comme "complexe" car je ne vois pas de moyen plus simple de gérer ces chaînes dans ce tableau.

19
Mark Schultheiss

Bien que j'aie vu les méthodes suggérées utilisées et fonctionnelles, je pense que la définition de la valeur d'un champ caché uniquement en utilisant JSON.stringify casse le HTML ...

Ici, je vais expliquer ce que je veux dire:

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

Comme vous pouvez le voir, la première citation double après que le support de chaîne ouverte ait pu être interprétée par certains navigateurs comme:

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

Donc, pour une meilleure approche, je suggère d'utiliser la fonction encodeURIComponent. Avec le JSON.stringify, nous devons avoir quelque chose comme ceci:

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

Maintenant, cette valeur peut être stockée en toute sécurité dans un type d'entrée caché comme ceci:

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

ou (encore mieux) en utilisant l'attribut data- de l'élément HTML manipulé par le script qui consommera les données, comme ceci:

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

Maintenant, pour lire les données, nous pouvons faire quelque chose comme:

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

Vous pouvez utiliser input.value = JSON.stringify(obj) pour transformer l'objet en chaîne.
Et lorsque vous en avez besoin, vous pouvez utiliser obj = JSON.parse(input.value)

L'objet JSON est disponible sur les navigateurs modernes ou vous pouvez utiliser la bibliothèque json2.js depuis json.org

20
Mic

Si vous utilisez JSON Serializer , vous pouvez simplement stocker votre objet au format chaîne comme tel

myHiddenText.value = JSON.stringify( myObject );

Vous pouvez ensuite récupérer la valeur avec

myObject = JSON.parse( myHiddenText.value );

Cependant, si vous ne transmettez pas cette valeur aux soumissions de pages, cela pourrait être plus facile pour vous, et vous vous épargnerez beaucoup de sérialisation, si vous la glissez simplement en tant que variable javascript globale.

12
David Hedlund

Il semble que la valeur de retour soit dans un tableau? C'est un peu étrange ... et sachez également que certains navigateurs permettent d'analyser cela à partir d'une demande interdomaine (ce qui n'est pas vrai lorsque vous avez un objet JSON de niveau supérieur).

Quoi qu'il en soit, s'il s'agit d'un wrapper de tableau, vous voudrez quelque chose comme ceci:

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

Vous pouvez ensuite le récupérer via un simple appel .val () sur le même champ. Honnêtement, cela semble plutôt étrange. Le champ masqué ne persistera pas entre les demandes de page, alors pourquoi ne le gardez-vous pas simplement dans votre propre ensemble de valeurs (pseudo-espace de noms)? Par exemple.,

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

Cela le rendra accessible de n'importe où, sans aucune gestion de champ de saisie hacky. C'est aussi beaucoup plus efficace que de faire une modification DOM pour un stockage de valeur simple.

0
jmar777