2012-06-15 13 views

Respuesta

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

Supongo que lo único que puedo decir sobre mi solución es que funciona con estructuras aún más complejas. ¡Paul mecanografía más rápido que yo!: D – BKK

+0

Pensé en esta solución también. Es más robusta, como dijiste, puede manejar estructuras complejas pero siempre hay que deserializar JSON el json en cada página receptora. Hice algo muy similar en este ejemplo pero a través de la forma: http://stackoverflow.com/questions/10392604/coldfusion-serializejson-example/10392839#10392839 – Paul

+0

¡Gran respuesta, Ben! –

13

¿cómo es esta?

<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

bastante bien en realidad :) – Daniel

+4

No se olvide que puede utilizar también funciones de la lista, es decir, 'para (clave en tmpStruct) { \t myURL = listAppend (myURL, clave y "=" & URLEncodedFormat (tmpStruct [clave]), "&"); \t}. Ambos funcionan, aunque el enfoque json atrae al programador perezoso en mí;) – Leigh

Cuestiones relacionadas