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

0voto

jmar777 Punkte 37124

Es sieht so aus, als ob der Rückgabewert in einem Array ist? Das ist irgendwie seltsam... und sei auch darauf hingewiesen, dass bestimmte Browser dies bei einer Cross-Domain-Anfrage zulassen werden (was nicht der Fall ist, wenn Sie ein Top-Level-JSON-Objekt haben).

Wie dem auch sei, wenn es sich um einen Array-Wrapper handelt, benötigen Sie etwas wie das hier:

$('#mein-verstecktes-feld').val(theObject[0].id);

Später können Sie es einfach durch einen einfachen .val() Aufruf auf demselben Feld abrufen. Das sieht ehrlich gesagt ziemlich seltsam aus. Das versteckte Feld wird nicht über Seitenanfragen hinweg bestehen bleiben, also warum behalten Sie es nicht einfach in Ihrem eigenen (Pseudo-namespaced) Wertebucket? Z.B.,

$MeinNamensraum = $MeinNamensraum || {};
$MeinNamensraum.meinSchlüssel = theObject;

Dadurch wird es für Sie überall verfügbar sein, ohne dass Sie hacky Eingabefeldverwaltung benötigen. Es ist auch effizienter als DOM-Änderungen für einfache Wertespeicherung.

0 Stimmen

Würde diese Methode auch nach asynchronen Anfragen funktionieren und von dynamisch generierten Elementen aus zugänglich sein? z.B. LoadRemoteDataFunction(...).then( Speichern in Pseudobucket) ---> DynamicallyGenerateFormPugin( Zugriff auf asynchron abgerufene Daten);

0voto

Maciej Krawczyk Punkte 11760

Base64-Lösung

// codieren
theInput.value = btoa(JSON.stringify({ test: true }));

// decodieren
let decoded = JSON.parse(atob(theInput.value));

Warum Base64?

Das Eingabefeld kann von einem Backend verarbeitet werden, das in einer anderen Programmiersprache als JavaScript läuft. Zum Beispiel ist die Implementierung von rawurlencode in PHP leicht unterschiedlich von encodeURIComponent in JavaScript. Durch die Codierung in Base64 können Sie sicher sein, dass egal in welcher anderen Programmiersprache das Backend läuft, es wie erwartet verarbeitet wird.

0 Stimmen

IDEs können Deprecation-Warnungen für btoa/atob anzeigen, jedoch ist dies nur relevant für Back-End-Kontexte (d.h. NodeJS). Für Front-End kannst du sie immer noch verwenden und um etwaige Deprecation-Warnungen loszuwerden, füge "window." hinzu, wie folgt: window.btoa() oder window.atob()... was sowieso klareren semantischen Code ergibt.

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