通过JQuery传递和返回ColdFusion结构

通过JQuery传递和返回ColdFusion结构,jquery,ajax,data-structures,coldfusion,components,Jquery,Ajax,Data Structures,Coldfusion,Components,我有一个ColdFusion会话变量,它是一个数据结构。我的目标是执行一个jQuery调用,该调用通过Ajax完成以下两件事情之一: 将该ColdFusion结构发送到ColdFusion组件方法,使用新创建的字符串更新该结构的元素,然后返回相同的结构 或 执行ColdFusion组件方法,该方法创建一个新字符串,返回该字符串,并在Ajax调用后将该新字符串分配给同一ColdFusion会话结构的元素 我想这很容易,但我一直有一些问题。有人知道我需要做什么吗?好吧,CF会话结构和jQuery在两

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

  • 将该ColdFusion结构发送到ColdFusion组件方法,使用新创建的字符串更新该结构的元素,然后返回相同的结构
  • 执行ColdFusion组件方法,该方法创建一个新字符串,返回该字符串,并在Ajax调用后将该新字符串分配给同一ColdFusion会话结构的元素

  • 我想这很容易,但我一直有一些问题。有人知道我需要做什么吗?

    好吧,CF会话结构和jQuery在两个不同的领域中运行——服务器上的CF和浏览器中的jQuery。为了从Ajax“将该ColdFusion结构发送到[cfc]…”,您必须将会话结构序列化为json字符串,然后以某种方式将该json字符串传输到客户端。最有可能的情况是,您希望在向客户端呈现页面时执行以下操作:

    <cfoutput>var jsonStruct = #SerializeJSON(session.myStruct)#;</cfoutput>
    
    请注意,您应该使用include来进行序列化,因为某些浏览器本身不支持
    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>
    
    
    
    因此我使用SerializeJSON创建jsonStruct以发送到CF组件。stringify使其成为CF中的结构,对吗?在成功返回结构时,如何将更改的会话结构分配回原始页面上的当前会话结构?SerializeJSON是一个CF函数,它接受CF对象并将其呈现为字符串。stringify是一个javascript函数,它接受一个javascript对象并将其呈现为字符串。我已经更新了答案,以显示如何在CFC和jQuery之间来回移动。这真是太酷了!但是,返回值“respJSON”是cfreturn“session.myStruct”。并将respJSON分配给jsonStruct。如何将coldfusion会话变量指定给该结构?Ajax单独调用coldfusion组件,该会话变量最终与当前使用的会话变量不同。那么,在成功调用Ajax之后,如何分配更新的会话结构呢?在CFC中分配coldfusion会话变量。看一看我的评论行。该行是“将coldfusion会话变量分配给该结构”(表示JavaScript中的结构)。
    <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>