通过JQuery传递和返回ColdFusion结构



我有一个ColdFusion会话变量,它是一个数据结构。我的目标是执行一个jQuery调用,该调用通过Ajax完成以下两件事之一:

  1. 将该ColdFusion结构发送到ColdFusioncomponent方法,使用新创建的字符串更新该结构的元素,并返回相同的结构

  1. 执行一个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>

最新更新