Skip to main content
 首页 » 编程设计

jquery之如何解析 ColdFusion CFC 返回的 JSON

2026年05月17日41zengkefu

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

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

这是 JQuery 的样子。

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

这是 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> 

编辑 - 替代 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> 

如顶部 ajax 调用中的 success 函数所示,div1 将填充 JSON 响应,如下所示。

{"COLUMNS":["ID","NAME"],"DATA":[[123456,"John"]]} 

编辑 - 替代响应

[{"ID":123456,"NAME":"John"}]    

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

请您参考如下方法:

CF11:支持,请参阅 doc 中的 serialization.serializeQueryAs .

CF10 或以下:返回 queryToArray(testQuery),不要忘记对 testQuery 进行 var 范围

private function queryToArray(q) { 
    var s = []; 
    var cols = q.columnList; 
    var colsLen = listLen(cols); 
    for(var i=1; i<=q.recordCount; i++) { 
        var row = {}; 
        for(var k=1; k<=colsLen; k++) { 
            row[lcase(listGetAt(cols, k))] = q[listGetAt(cols, k)][i]; 
        } 
        arrayAppend(s, row); 
    } 
    return s; 
} 

引用:http://www.raymondcamden.com/index.cfm/2014/5/8/ColdFusion-11s-new-Struct-format-for-JSON-and-how-to-use-it-in-ColdFusion-10

或者,使用:https://github.com/cutterbl/serializeCFJSON使用Javascript在客户端解析CF查询数据集。