【问题标题】:Passing and returning ColdFusion Structure via JQuery通过 JQuery 传递和返回 ColdFusion 结构
【发布时间】:2012-03-02 22:28:39
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: jquery ajax data-structures coldfusion components


    【解决方案1】:

    嗯,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 来进行序列化,因为某些浏览器coughIEcough 本身不支持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 组件。 JSON.stringify 使它成为 CF 中的结构正确吗?当我成功返回结构时,如何将更改后的会话结构分配回原始页面上的当前会话结构?
    • SerializeJSON 是一个 CF 函数,它接受一个 CF 对象并将其呈现为字符串。 JSON.stringify 是一个 javascript 函数,它接受一个 javascript 对象并将其呈现为一个字符串。
    • 我已经更新了答案,以展示您如何在 CFC 和 jQuery 之间来回切换。
    • 这真的很酷!但是,返回值“respJSON”是 cfreturn“session.myStruct”。并且 respJSON 被分配给 jsonStruct。如何分配该结构的冷融合会话变量? Ajax 对coldfusion 组件进行单独调用,该会话变量最终与当前使用的不同。那么在 Ajax 调用成功后如何分配更新后的 session 结构呢?
    • coldfusion 会话变量在 CFC 中分配。看看我在评论中的那一行。该行是“分配[ing]该结构的coldfusion会话变量”(意思是来自JavaScript的结构)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多