如何解析ColdFusion CFC的JSON返回?

mad*_*ora 5 ajax coldfusion jquery json cfc

为了便于解释,我简化了这段代码.

我有一个cfm页面,用户点击表格行并获取ID.我想将该ID发送到CFC,在那里运行查询,并将结果返回到cfm页面.

这是JQuery的样子.

$.ajax({
    url: "test.cfc?method=testFunction",
    data: {ID:123456},
    success: function(response) {
        $("#div1").html(response);
    }
});
Run Code Online (Sandbox Code Playgroud)

这就是cfc的样子.

<cfcomponent>
    <cffunction name="testFunction" access="remote" returnType="query" returnFormat="JSON">
           <cfquery name="testQuery" datasource="x">
                Select ID, NAME
                From Table
                Where ID = '#url.ID#'   
            </cfquery>

            <cfreturn testQuery>
    </cffunction>
</cfcomponent>
Run Code Online (Sandbox Code Playgroud)

编辑 - 替代CFC方法

<cffunction name="testFunction" access="remote">
    <cfquery name="testQuery" datasource="x">
                Select ID, NAME
                From Table
                Where ID = '#url.ID#'   
            </cfquery>

    <cfset response = [] />

    <cfoutput query="testQuery">
        <cfset obj = {
            "ID" = ID,
            "NAME" = NAME               
         } />
        <cfset arrayAppend(response, obj) />
    </cfoutput>

    <cfprocessingdirective suppresswhitespace="Yes"> 
        <cfoutput>
            #serializeJSON(response)#
        </cfoutput>
    </cfprocessingdirective>

    <cfsetting enablecfoutputonly="No" showdebugoutput="No">
</cffunction>
Run Code Online (Sandbox Code Playgroud)

由于顶部显示的ajax调用中的成功函数,div1将填充JSON响应,如下所示.

{"COLUMNS":["ID","NAME"],"DATA":[[123456,"John"]]}
Run Code Online (Sandbox Code Playgroud)

编辑 - 替代响应

[{"ID":123456,"NAME":"John"}]   
Run Code Online (Sandbox Code Playgroud)

接下来,我希望能够在页面的某个位置使用和输出JSON响应中的数据.我怎样才能做到这一点?我很难理解解析这些数据.我主要关注的是从数组格式中获取这些数据,以便将其输出到页面中的表单字段中.

mad*_*ora 1

我想出了最好的方法来做到这一点。

  1. 让 cfc 返回仅带有大括号的查询结果,而不是带有括号的数组。

    <cfcomponent>
        <cffunction name="testFunction" access="remote">
             <cfquery name="testQuery" datasource="x">
                 Select ID, NAME
                 From Table
                 Where ID = '#url.ID#'   
             </cfquery>
    
        <cfoutput query="testQuery">
            <cfset obj = {
                "ID" = ID,
                "NAME" = NAME               
             } />
        </cfoutput>
    
        <cfprocessingdirective suppresswhitespace="Yes"> 
            <cfoutput>
                #serializeJSON(obj)#
            </cfoutput>
        </cfprocessingdirective>
    
        <cfsetting enablecfoutputonly="No" showdebugoutput="No">
    </cffunction>
    
    Run Code Online (Sandbox Code Playgroud)
    1. JQuery 看起来像这样

      $.ajax ({
          //location of the cfc
          url: "test.cfc",
          //function name and url variables to send
          data: {method:'functioname', ID:ID},
          //function run on success can the returned json object and split it out each field to a form field.  Here I'm just showing one field in the alert.
          success: function(obj) {
               var parsedjson = $.parseJSON(obj);
               alert(parsedjson.ID);
          }
      });
      
      Run Code Online (Sandbox Code Playgroud)