2012-06-15 4 views

Antwort

19
<cfscript> 
// create simple struct 
x = { a=1, b=2, c=3 }; 
WriteDump(x); 

// serialize in JSON format and encode for URL transport 
y = URLEncodedFormat(SerializeJSON(x)); 
WriteOutput('url: <a href="#SCRIPT_NAME#?z=#y#">#SCRIPT_NAME#?#y#</a>'); 

// now receive the URL variable and dump it 
if (StructKeyExists(url, 'z')) { 
    writeOutput('<h3>URL Data:</h3>'); 
    writeDump(DeserializeJSON(URLDecode(z))); 
} 
</cfscript> 
+0

Ich denke, das einzige, was ich über meine Lösung sagen kann, ist, dass es mit noch komplexeren Strukturen funktioniert. Paul schreibt schneller als ich !: D – BKK

+0

Ich habe auch über diese Lösung nachgedacht.Es ist robuster, wie Sie erwähnt haben, kann mit komplexen Strukturen umgehen, aber y ou immer DESERIALISEJSON der JSON auf jeder empfangenden Seite Ich tat etwas sehr ähnlich in diesem Beispiel, aber über das Formular: http://StackOverflow.com/Questions/10392604/coldfusion-serializejson-example/10392839#10392839 – Paul

+0

Große Antwort, Ben! –

13

Wie sieht das?

<cfset tmpStruct = {"firstItem" = "one", "secondItem" = "two"} /> 

<cfset myUrl = "http://domain.com/file.cfm?" /> 

<cfloop list="#structKeyList(tmpStruct)#" index="i" > 
    <cfset myUrl = myUrl & i & "=" & tmpStruct[i] & "&" /> 
</cfloop> 

<cfset myUrl = left(myUrl,len(myUrl)-1) /> 

<cfdump var="#myUrl#" /> 
+1

ganz nett eigentlich :) – Daniel

+4

Vergessen Sie nicht, dass Sie auch dh Listenfunktionen verwenden können, 'für (Schlüssel in tmpStruct) { \t myURL = listAppend (myURL, Schlüssel & "=" & URLEncodedFormat (tmpStruct [key]), "&"); \t}. Beide funktionieren, obwohl die JSON-Ansatz an den faulen Programmierer in mir anspricht;) – Leigh

Verwandte Themen