52 Stimmen

Store return json value in input hidden field

Ich frage mich, ob es möglich ist, das zurückgegebene JSON in einem versteckten Eingabefeld zu speichern. Zum Beispiel ist dies meine JSON-Rückgabe:

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

Ich möchte nur die id in einem versteckten Feld speichern, damit ich später darauf verweisen und etwas damit tun kann.

Beispiel: Ich habe so etwas:

und möchte später den Wert mit jQuery zurückgeben, wie folgt:

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

0 Stimmen

162voto

rodu Punkte 2158

Auch wenn ich die vorgeschlagenen Methoden gesehen und funktioniert habe, denke ich, dass das Setzen des Werts eines versteckten Feldes nur mit JSON.stringify das HTML kaputt macht...

Hier werde ich erklären, was ich meine:

Wie Sie sehen können, könnte das erste doppelte Anführungszeichen nach der öffnenden Kette von einigen Browsern als interpretiert werden:

Für einen besseren Ansatz dazu würde ich vorschlagen, die encodeURIComponent Funktion zu verwenden. Zusammen mit dem JSON.stringify sollten wir etwas Ähnliches wie folgt haben:

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

Jetzt kann dieser Wert sicher in einem versteckten Eingabetyp gespeichert werden, wie folgt:

oder (noch besser) mit dem data-Attribut des HTML-Elements, das vom Skript manipuliert wird, das die Daten verbrauchen wird, wie folgt:

Jetzt können wir die Daten wie folgt zurücklesen:

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

18 Stimmen

Dies ist der einzige Ansatz, der verwendet werden sollte, wenn Sie komplexe Objekte in einem Formular POST zurückgeben müssen. Es sollte die akzeptierte Antwort sein (weil die meisten Menschen, die diese Frage suchen und finden, genau das tun möchten).

0 Stimmen

Beste Lösung bisher, dies sollte als akzeptierte Antwort gelten.

2 Stimmen

Wow beste Lösung. Ich hatte ein Problem mit JSON.stringify für 2 Stunden, dann fand ich diese umwerfende Antwort. Vielen Dank.

20voto

Mic Punkte 24128

Sie können input.value = JSON.stringify(obj) verwenden, um das Objekt in einen String umzuwandeln.
Und wenn Sie es zurück benötigen, können Sie obj = JSON.parse(input.value) verwenden.

Das JSON-Objekt ist auf modernen Browsern verfügbar oder Sie können die json2.js-Bibliothek von json.org verwenden.

19voto

Mark Schultheiss Punkte 30349

Sie können es in einem versteckten Feld speichern oder in einem JavaScript-Objekt (meine bevorzugte Methode) speichern, da der wahrscheinliche Zugriff über JavaScript erfolgt.

HINWEIS: Da Sie ein Array haben, würde dies dann als myvariable[0] auf das erste Element zugreifen (wie Sie es haben).

BEARBEITEN Sie ein Beispiel:

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

var myvariable ="";

function LoadProviders(jdata)
{
  myvariable = jdata;
};
alert(myvariable[0].id);// zeigt "15aea3fa" im Alert an

BEARBEITEN: Habe diese Seite erstellt: http://jsfiddle.net/GNyQn/ um das oben Gesagte zu demonstrieren. Dieses Beispiel geht davon aus, dass Sie bereits Ihre benannten Stringwerte im Array ordnungsgemäß zurückgegeben haben und sie nur gemäß der Frage des OP speichern müssen. Im Beispiel habe ich auch die Werte des ersten zurückgegebenen Arrays (gemäß dem Beispiel des OP) in ein Div als Text eingefügt.

Ich bin mir nicht sicher, warum dies als "komplex" angesehen wurde, da ich keinen einfacheren Weg sehe, diese Strings in diesem Array zu behandeln.

0 Stimmen

Ungerade keine Kommentare zu den negativen Bewertungen einer funktionierenden Lösung. Offensichtlich können Sie den Wert auch in ein verstecktes Feld mit etwas wie $(myfieldselector).val(myvalue); setzen. Beides habe ich erwähnt. Das Array ist der Grund, warum ich das Javascript-Objekt gewählt habe.

0 Stimmen

JS ist Front-End, und JSP ist Server. Was ist, wenn Sie JSON serverseitig einstellen möchten, da sie im Front-End nicht zugänglich sein werden? Wie speichern Sie JSON in versteckten Feldern?

0 Stimmen

@user2696258 - noch eine Frage, bitte posten Sie das als eine neue Frage, beziehen Sie sich auf diese, wenn Sie glauben, dass es Ihnen bei Ihrer neuen Frage helfen könnte, zusammen mit dem Code, den Sie versucht haben.

16voto

David Hedlund Punkte 125085

Wenn Sie den JSON-Serializer verwenden, können Sie Ihr Objekt einfach im String-Format speichern:

myHiddenText.value = JSON.stringify( myObject );

Sie können den Wert dann so zurückbekommen:

myObject = JSON.parse( myHiddenText.value );

Wenn Sie diesen Wert jedoch nicht über Seitenabsendungen übergeben, könnte es für Sie einfacher sein und Sie sparen sich eine Menge Serialisierung, wenn Sie ihn einfach als globale JavaScript-Variable verstecken.

0voto

JohnSmith Punkte 4388

Legen Sie einfach das versteckte Feld mit Javascript fest :

document.getElementById('elementId').value = 'was auch immer';

Oder fehlt mir etwas?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X