4

我需要一种从coldfusion中获取json返回并在jquery中显示的方法

<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>&nbsp&nbsp&nbsp&nbsp</td><th style="text-align:left;" id="first">Requestor:</th><td>'+thedata.newrequestor1+'</td><td>&nbsp&nbsp&nbsp&nbsp</td><th style="text-align:left;" id="first">Approved:</th><td>'+thedata.newapproved1+'</td><td>&nbsp&nbsp&nbsp&nbsp</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 是我的第三个等等。

我如何在 jquery 中处理这个问题,或者我必须在coldfusion cfc 中开始不同的?

4

3 回答 3

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"]]}
于 2012-04-10T20:34:07.253 回答
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 库中使用了一个自定义函数来进行从查询结构到行结构数组的转换,我对其进行了修改以使用您的变量。

于 2012-04-10T20:18:31.387 回答
0

如果你想要一些具有正常 json 结构的东西,你将不得不创建它。如果您正在与 CORS 作战,请 PM 我。我在 Angular 7 前端使用它。returnType="query"从您的 cffunction 标签中删除;它只是返回半生不熟的准 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>   
于 2018-11-15T05:27:48.157 回答