为了便于解释,我简化了这段代码。
我有一个 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;
}
或者,使用:https://github.com/cutterbl/serializeCFJSON使用Javascript在客户端解析CF查询数据集。
