2012-06-15 15 views
5

के माध्यम से स्ट्रिंग के रूप में एक स्ट्रक्चर पास करना क्या यूआरएल में उपयोग के लिए एक स्ट्रिंग के रूप में एकल स्तर की संरचना को क्रमबद्ध करने का कोई आसान तरीका है?कोल्डफ्यूजन: यूआरएल

?key1=val1&key2=val2 

उत्तर

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

मुझे लगता है कि मेरे समाधान के बारे में केवल एक ही बात यह है कि यह और भी जटिल संरचनाओं के साथ काम करता है। पॉल मेरे से तेज़ी से टाइप करता है!: डी – BKK

+0

मैंने इस समाधान के बारे में भी सोचा था। जैसा कि आपने उल्लेख किया है उतना मजबूत है जटिल संरचनाओं को संभाल सकता है लेकिन y कहां हमेशा प्रत्येक प्राप्त पृष्ठ पर जेसन को जेएसओएन करना है, मैंने इस उदाहरण में बहुत कुछ किया है लेकिन फ़ॉर्म के माध्यम से: http://stackoverflow.com/questions/10392604/coldfusion-serializejson-example/10392839#10392839 – Paul

+0

ग्रेट उत्तर, बेन! –

13

यह कैसे दिखता है:

उदाहरण के लिए

?

<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

काफी अच्छा वास्तव में :) – Daniel

+4

मत भूलना आप उपयोग कर सकते हैं भी सूची कार्य (tmpStruct में महत्वपूर्ण) { \t myUrl = listAppend (myURL, कुंजी और "=" और URLEncodedFormat (tmpStruct के लिए अर्थात ' [कुंजी]), "&"); \t}' दोनों काम, हालांकि जेसन दृष्टिकोण मेरे आलसी प्रोग्रामर से अपील करता है;) – Leigh