2010-11-29 24 views
1

Ich speichere JSON-Daten in versteckten HTML-Feldern auf der Serverseite. Dann möchte ich diese Daten mit Javascript und JQuery auf der Client-Seite abrufen. Das Problem ist, dass ich eine JSON-Zeichenfolge anstelle eines JSON-Objekts erhalte.Abrufen von JSON-Daten von einer versteckten Eingabe

Dies ist mein Code auf der Server-Seite:

<form id="data" style="display: none;"> 
    <input id="channels" type="hidden" tal:attributes="value python: view.context['ChannelManager'].toJSON(view.channels.values())" /> 
    <input id="mediaGroups" type="hidden" tal:attributes="value python: view.context['MediaGroupManager'].toJSON(view.mediaGroups.values())" /> 
</form> 

Dies ist mein Code auf der Client-Seite:

copy.channelList = new ChannelTest(); 
copy.channelList.fromJSONObjectAll($("#data input[id=channels]").val()) 

So bekomme ich JSON-String anstelle von JSON-Objekt von diesem, $ ("#Dateneingabe [ID = Kanäle]". val().

Wie konnte ich JSON-Objekt ohne Konvertierung von JSON-Zeichenfolge in JSON-Objekt erhalten?

Vielen Dank im Voraus!

+1

Was meinen Sie mit "Get JSON-Objekt ohne Konvertierung der Zeichenfolge"? – casablanca

+0

Ich postete, was ich denke, Sie wollen, aber ja, dieser Teil ist verwirrend. Sie fragen, wie man eine JSON-Zeichenkette in ein Objekt umwandelt, ohne eine JSON-Zeichenkette in ein Objekt zu konvertieren ... –

+0

Wenn ich die HTML-Eingaben fülle, sind die Daten ein JSON-Objekt, kein JSON-String. Wenn ich diese Daten jedoch auf der Clientseite erhalte, handelt es sich um eine JSON-Zeichenfolge anstelle von JSON-Objekt. Ich möchte vermeiden, diese JSON-Zeichenfolge in JSON-Objekt zu konvertieren. – bribon

Antwort

6
JSON.parse(jsonString); 

Für ältere Browser, die keine nativen JSON-Unterstützung haben, können Sie einfach schließen json2.js und dies wird eine brauchbare Funktion geworden.


Oder Sie können diesen Schritt mit einigen serverseitigen Skripten überspringen. Sie können den JSON einfach in ein Skript-Tag schreiben. Implizit wird es stattdessen vom Skript-Tag analysiert, als roher Javascript.

<script type="text/javascript"> 
    var myObj = <%= myJsonString %>; 
    console.log('we got this value: '+ myObj.myValue); 
</script> 
+0

Ich möchte JSON.parse (JsonString) vermeiden, da, wenn ich es auf der Clientseite speichern, die Daten JSON-Objekt sind. Was ist das Problem? Kann ich JSON-Objekte in HTML-Eingaben speichern? Ich kann diese Art von Skripten nicht mit dem Framework verwenden, das ich verwende – bribon

+0

'' Tags können _only_ String-Werte haben. Wenn Sie also Ihre Daten als String speichern wollen, müssen Sie diesen von einem String in ein JavaScript-Objekt konvertieren. Oder Sie können das Einfügen eines HTML-Elements überspringen und es direkt in das Skript-Tag schreiben, wie oben beschrieben. Aber Sie erhalten niemals eine '' um ein Objekt direkt zu speichern. Nur eine Zeichenfolge. Denken Sie daran, dass Formularelemente sich selbst für die Formularübertragung kodieren. Also '' würde sich wie '? Foo = bar' kodieren. Wenn das ein JavaScript-Objekt wäre, wie würde es sich als komplexes Objekt kodieren? –

+0

@bribon: Ihre Daten auf dem Server sind eine JSON-Zeichenfolge, es gibt keine Möglichkeit, sie direkt als JavaScript-Objekt an den Client zu übertragen. Wenn Sie dem Vorschlag von Sculegy folgen (die Daten werden als js-Variablen eingebettet, dann führt der Browser die Analyse durch, wenn die Seite zum ersten Mal gelesen wird) –

Verwandte Themen