Czy istnieje prosty sposób na serializację struktury jednopoziomowej jako łańcucha znaków do użycia w adresie URL?Coldfusion: przekazywanie struct jako String poprzez URL
na przykład:
?key1=val1&key2=val2
Czy istnieje prosty sposób na serializację struktury jednopoziomowej jako łańcucha znaków do użycia w adresie URL?Coldfusion: przekazywanie struct jako String poprzez URL
na przykład:
?key1=val1&key2=val2
<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>
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#" />
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
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
Świetna odpowiedź, Ben! –