我有一个ColdFusion会话变量,它是一个数据结构。我的目标是执行一个jQuery调用,该调用通过Ajax完成以下两件事之一:
- 将该ColdFusion结构发送到ColdFusioncomponent方法,使用新创建的字符串更新该结构的元素,并返回相同的结构
或
- 执行一个ColdFusion组件方法,该方法创建一个新字符串,返回该字符串,并在Ajax调用后将该新字符串分配给同一ColdFusionsession结构的元素
我想这会很容易,但我遇到了一些问题。有人知道我需要做什么吗?
好吧,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来进行序列化,因为一些浏览器咳嗽IE止咳本机不支持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>