我需要一种方法从coldfusion中获取json返回并在jquery中显示它 我可以显示第一个结果很好,但如果更多的那条记录回来我就会被卡住 这是我的cfc
<cfquery name="users" datasource="#thedb#">
In this query I can get 1 record to 25 or even more results
</cfquery>
这是我对jquery的看法,不确定这是否是一个很好的方法,但....这就是我现在处理多个记录的方式。
<cfset var user = structNew()/>
<cfset thenumber = 1>
<cfloop query="users">
<cfset user["newrequestor#theNumber#"] = users.requestor/>
<cfset user["newrequestorusername#theNumber#"] = users.requestor_username/>
<cfset user["newrequestorphone#theNumber#"] = users.requestorphone/>
<cfset user["newrequestoremail#theNumber#"] = users.requestoremail/>
<cfset user["newthedate#theNumber#"] = users.thedate/>
<cfset user["newapproved#theNumber#"] = users.approved/>
<cfset user["newcomments#theNumber#"] = users.comments/>
<cfset user["newviewed#theNumber#"] = users.viewed/>
<cfset thenumber = thenumber + 1>
</cfloop>
<cfreturn user>
CFC结束
这是我的jquery,我手动设置为抓取第一条记录...不确定如何循环以获取所有记录。
在这里,我将我的参数传递给cfc以获得我的结果。效果很好
thedata = instance.getSearch($("#therequestor").val(), $("#fromDate").val(), $("#toDate").val(), $("#theapproved").val(), $("#theroom").val());
接下来我在jquery中构建一行来处理我的第一条记录,手动设置不是动态的。
var new_Return = '<tr id="newReturn"><th style="text-align:left;" id="first">Request Date:</th><td>'+thedata.newthedate1+'</td><td>    </td><th style="text-align:left;" id="first">Requestor:</th><td>'+thedata.newrequestor1+'</td><td>    </td><th style="text-align:left;" id="first">Approved:</th><td>'+thedata.newapproved1+'</td><td>    </td><th style="text-align:left;" id="first">Viewed:</th><td>'+thedata.newviewed1+'</td></tr>';
$("#theReturnFormTable").append(new_Return)
显示我的div标签中的第一个结果,如果我有多个记录,我该如何循环 例 thedata.newrequestor1是我的第一张唱片
然后我可以有更多的
thedata.newrequestor2是我的第二个 thedata.newrequestor3是我的第3个等等
如何在jquery中处理这个问题,或者我必须在coldfusion cfc中开始不同?
答案 0 :(得分:7)
您可以调用远程函数并让ColdFusion将查询对象序列化为JSON吗? (注意returnFormat =“JSON”)
<cffunction name="getUsers" access="remote" returnType="query" returnFormat="JSON">
<cfquery name="users" datasource="#thedb#">
In this query I can get 1 record to 25 or even more results
</cfquery>
<cfreturn users>
</cffunction>
JSON格式将如下所示:
{"COLUMNS":["NEWREQUESTER","NEWREQUESTERUSERNAME"],"DATA":[["1","JOHN DOE"],["2","JIM DOE"]]}
答案 1 :(得分:3)
将您的用户存储在一个数组中并返回该数组。
<cfset var userArr = arrayNew(1)/>
<cfloop query="users">
<cfset var user = structNew()/>
<cfloop list="#users.columnlist#" index="column">
<cfset user[column] = users[column]>
</cfloop>
<cfset ArrayAppend(userArr, user)/>
</cfloop>
<cfreturn userArr />
在javascript中创建一个对象数组,如下所示:
[
{
newrequestrr:"foobar",
newrequestorusername:"foobar",
...
},
...
]
更新:我让代码更具动态性。我在我的udf库中使用自定义函数来进行从查询结构到行结构数组的转换,我修改它以使用你的变量。
答案 2 :(得分:0)
如果您希望使用普通的json结构,则必须创建它。如果您要与CORS作战,请PM我。我在Angular 7前端上使用它。从cffunction标记中删除returnType="query"
;它只是返回半烘烤的准json格式。希望这对某人有帮助。
<cffunction name="getRecipies" access="remote" returnFormat="JSON"
<cfquery name="qryRecipies" datasource="#VARIABLES._dsnName#" username="#VARIABLES._dsnUsername#" password="#VARIABLES._dsnPassword#">
SELECT *
FROM recipes
</cfquery>
<cfset prepArr = arrayNew(1)/>
<cfloop query="qryRecipies">
<cfset prep = structNew()>
<cfset prep["id"] = qryRecipies.id>
<cfset prep["name"] = qryRecipies.name>
<cfset prep["description"] = qryRecipies.description>
<cfset prep["imagePath"] = qryRecipies.imagePath>
<cfset ArrayAppend(prepArr, prep)/>
</cfloop>
<cfreturn serializeJSON(prepArr) />
</cffunction>