2012-06-15 22 views

Trả lời

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

Tôi đoán điều duy nhất tôi có thể nói về giải pháp của tôi là nó hoạt động với các cấu trúc phức tạp hơn. Paul loại nhanh hơn tôi: D – BKK

+0

Tôi nghĩ về giải pháp này là tốt.Nó mạnh mẽ hơn như bạn đã đề cập có thể xử lý các cấu trúc phức tạp nhưng y ou luôn luôn phải deserializeJSON json trên mỗi trang nhận tôi đã làm một cái gì đó rất giống nhau trong ví dụ này, nhưng thông qua hình thức: http://stackoverflow.com/questions/10392604/coldfusion-serializejson-example/10392839#10392839 – Paul

+0

Câu trả lời tuyệt vời, Ben! –

13

như thế nào này trông?

<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

khá đẹp thực sự :) – Daniel

+4

Đừng quên bạn có thể sử dụng cũng có chức năng danh sách tức là 'for (quan trọng trong tmpStruct) { \t myUrl = listAppend (myURL, phím & "=" & URLEncodedFormat (tmpStruct [key]), "&"); \t}'. Cả hai công việc, mặc dù cách tiếp cận json kháng cáo với lập trình lười biếng trong tôi;) – Leigh

Các vấn đề liên quan