通过JQuery传递和返回ColdFusion结构

use*_*412 6 ajax coldfusion jquery components data-structures

我有一个ColdFusion会话变量,它是一个数据结构.我的目标是执行一个jQuery调用,通过Ajax执行以下两种操作之一:

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

要么

  1. 执行ColdFusion组件方法,该方法创建一个新字符串,返回该字符串,并在Ajax调用后将该新字符串分配给同一ColdFusion会话结构的元素.

我认为这很容易,但我遇到了一些问题.有人知道我需要做什么吗?

Jak*_*sel 11

好吧,CF会话结构和jQuery在两个不同的领域运行 - 服务器上的CF和浏览器中的jQuery.为了"从Ajax中将该ColdFusion结构发送到[cfc] ...",您必须将会话结构序列化为json字符串,然后以某种方式将该json字符串传输到客户端.最有可能的是,您需要将此作为向客户端呈现页面的一部分:

<cfoutput>var jsonStruct = #SerializeJSON(session.myStruct)#;</cfoutput>
Run Code Online (Sandbox Code Playgroud)

然后,您可以jsonStruct根据需要使用jQuery代码中的变量(作为真正的JS对象).当您需要将其发送回CF时,您可以在Javascript端再次序列化它,如下所示:

$.ajax({
   url: "foo.cfc?method=myMethod", 
   dataType: "json",
   data: {myStruct: JSON.stringify(jsonStruct)}, 
   success: function (respJSON) {
      jsonStruct = respJSON;
   }
});
Run Code Online (Sandbox Code Playgroud)

请注意,您应该包含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>
Run Code Online (Sandbox Code Playgroud)