2010-08-10 4 views
42

Je me demandais s'il est possible de stocker le retour json dans un champ de saisie masqué. Par exemple, c'est ce que mon retour JSON:valeur de retour magasin json dans le champ d'entrée caché

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

Je voudrais simplement stocker l'identifiant dans un champ caché pour que je puisse y faire référence plus tard pour faire quelque chose avec elle.

Exemple: J'ai quelque chose comme ceci:

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

et je voudrais jquery retourner la valeur plus tard pour moi comme si:

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

voir aussi: http://stackoverflow.com/questions/11118947/jquery-equivalent-for-json-stringify –

Répondre

18

Vous pouvez stocker dans un champ caché, ou la stocker dans un objet javascript (ma préférence) que l'accès sera probablement via javascript.

REMARQUE: puisque vous avez un tableau, ce serait alors accessible comme myvariable[0] pour le premier élément (comme vous l'avez).

EDIT montrent par exemple:

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 démontrer 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, je mets aussi les valeurs du premier tableau retourné (par exemple OP) dans un div comme texte.

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

+0

bizarre aucun commentaire sur les votes à bas une solution viable. Évidemment, vous pouvez aussi mettre la valeur dans un champ caché avec quelque chose comme $ (myfieldselector) .val (myvalue); ainsi que. Les deux que j'ai noté. Le tableau est la raison pour laquelle j'ai choisi l'objet Javascript. –

+2

Je l'ai rejeté parce que c'est trop complexe. – Derrick

+0

JS est frontal et JSP est le serveur. Que se passe-t-il si vous voulez définir le côté serveur json uniquement car ils ne seront pas accessibles en frontal? Alors, comment va stocker JSON dans des champs cachés? – user2696258

-1

situé juste le champ caché avec javascript:

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

ou dois-je raté quelque chose?

12

Si vous utilisez le JSON Serializer, vous pouvez simplement stocker votre objet sous forme de chaîne en tant que telle

myHiddenText.value = JSON.stringify(myObject); 

Vous pouvez alors récupérer la valeur avec

myObject = JSON.parse(myHiddenText.value); 

Toutefois, si vous n'êtes pas En passant cette valeur à travers les soumissions de page, cela pourrait être plus facile pour vous, et vous économiserez beaucoup de sérialisation, si vous le renoncez comme une variable javascript globale.

18

Vous pouvez utiliser input.value = JSON.stringify(obj) pour transformer l'objet en une chaîne.
Et quand vous en avez besoin du retour, 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 de json.org

0

Il semble que la valeur de retour est dans un tableau? C'est un peu étrange ... et sachez que certains navigateurs vont permettre d'être analysé à partir d'une requête inter-domaines (ce qui n'est pas vrai quand vous avez un objet JSON de niveau supérieur).

Quoi qu'il en soit, si c'est une enveloppe de tableau, vous voulez quelque chose comme ceci:

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

Vous pouvez le récupérer plus tard par un simple .val() appeler sur le même terrain. Cela semble honnêtement un peu étrange cependant. Le champ masqué ne persistera pas dans les requêtes de pages, alors pourquoi ne pas le conserver dans votre propre compartiment de valeur (pseudo-espace)? Par exemple,

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

Il sera à votre disposition partout, sans aucune gestion de champ de saisie aki. C'est aussi beaucoup plus efficace que de faire des modifications DOM pour un stockage de valeur simple.

105

Bien que j'ai vu les méthodes proposées et utilisées de travail, je pense que la mise en valeur d'un champ caché en utilisant uniquement les JSON.stringify brise le HTML ...

Ici, je vais vous expliquer ce que je veux dire:

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

comme vous pouvez le voir le premier guillemet après le support de chaîne ouverte pourrait être interprétée par certains navigateurs comme:

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

donc, pour une meilleure approche à ce que je suggérerait d'utiliser la fonction encodeURIComponent. En collaboration avec le JSON.stringify nous Shold avons quelque chose comme ce qui suit:

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

Maintenant que la valeur peut être stocké en toute sécurité dans une entrée de type caché comme ceci:

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

ou (encore mieux) en utilisant la Data- attribut 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 relire les données que nous pouvons faire quelque chose comme:

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

Il s'agit de la seule approche à utiliser si vous devez renvoyer des objets complexes dans un formulaire POST. Cela devrait être la réponse acceptée (parce que la plupart des gens qui cherchent et trouvent cette question veulent faire exactement cela). –

+0

Meilleure solution jusqu'à présent, cette réponse devrait être acceptée. – digz6666

+1

Wow meilleure solution J'ai un problème avec JSON.stringify pendant 2 heures puis j'ai trouvé cette réponse de coup de tête. Je vous remercie. –

Questions connexes