2012-06-15 17 views

Odpowiedz

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

Myślę, że jedyne, co mogę powiedzieć o moim rozwiązaniu, to to, że działa z jeszcze bardziej złożonymi strukturami. Paul pisze szybciej niż ja: D – BKK

+0

Myślałem również o tym rozwiązaniu.Jest on bardziej wytrzymały, jak wspomniano, potrafi obsłużyć złożone struktury, ale Zawsze musisz deserializować JSON json na każdej stronie odbiorczej. Zrobiłem coś bardzo podobnego w tym przykładzie, ale za pomocą formularza: http://stackoverflow.com/questions/10392604/coldfusion-serializejson-example/10392839#10392839 – Paul

+0

Świetna odpowiedź, Ben! –

13

Jak to wygląda?

<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

dość ładny faktycznie :) – Daniel

+4

Nie zapomnij można użyć również funkcje lista tj 'dla (klucz w tmpStruct) { \t myUrl = listAppend (myURL, klucz i "=" & URLEncodedFormat (tmpStruct [key]), "&"); \t}" Oba utwory, chociaż podejście json'a przemawia do leniwego programisty;) – Leigh

Powiązane problemy