我有一个ColdFusion会话变量,它是一个数据结构.我的目标是执行一个jQuery调用,通过Ajax执行以下两种操作之一:
>将ColdFusion结构发送到ColdFusion组件方法,使用新创建的字符串更新该结构的元素,然后返回相同的结构.
要么
>执行ColdFusion组件方法,该方法创建新字符串,返回该字符串,并在Ajax调用后将该新字符串分配给同一ColdFusion会话结构的元素.
我认为这很容易,但我遇到了一些问题.有人知道我需要做什么吗?
解决方法
好吧,CF会话结构和jQuery在两个不同的领域运行 – 服务器上的CF和浏览器中的jQuery.为了“从Ajax中将该ColdFusion结构发送到[cfc] …”,您必须将会话结构序列化为json字符串,然后以某种方式将该json字符串传输到客户端.最有可能的是,您需要将此作为向客户端呈现页面的一部分:
<cfoutput>var jsonStruct = #SerializeJSON(session.myStruct)#;</cfoutput>
然后,您可以根据需要使用jQuery代码中的jsonStruct变量(作为真正的JS对象).当您需要将其发送回CF时,您可以在Javascript端再次序列化它,如下所示:
$.ajax({ url: "foo.cfc?method=myMethod",dataType: "json",data: {myStruct: JSON.stringify(jsonStruct)},success: function (respJSON) { jsonStruct = respJSON; } });
请注意,您应该包含json2.js以进行序列化,因为某些浏览器本身不支持JSON.stringify().
更新
我已经更新了示例jquery代码,以显示如何更新javascript对象以使用来自CFC的响应.要正常工作,你的CF需要看起来像这样:
<cffunction name="myMethod" access="remote" returnFormat="json"> <cfargument name="myStruct" type="string"> <cfset var realStruct = DeserializeJSON(arguments.myStruct)> <cfset session.myStruct = realStruct><!--- or whatever you want to do with it at this point ---> <cfreturn session.myStruct> </cffunction>