Coldfusion CFC Return JSON display in Jquery, how do I handle multiple records from CFC and display in Jquery?

半世苍凉 提交于 2019-12-23 14:49:13

问题


I need a way to grab the json return from coldfusion and display it in jquery I can display the first result fine, but if more that one record comes back I am stuck Here is my cfc

<cfquery name="users" datasource="#thedb#">
In this query I can get 1 record to 25 or even more results         
</cfquery>

Here is my out put to jquery, not sure if this is a good way to do this, but.... this is how I handle mutliple records right now.

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

End of CFC

Here is my jquery, I have it manually set to grab first record... not sure how to loop over to get all records returned.

Here I pass my arguments to the cfc to get my result. works great

thedata = instance.getSearch($("#therequestor").val(), $("#fromDate").val(), $("#toDate").val(), $("#theapproved").val(), $("#theroom").val());

Next I build a row in jquery to handle my first record, manual setting not dynamic.

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)

Displays first result in my div tag great, how can I loop over if I have multiple records Example thedata.newrequestor1 is my first record

then I could have more many more

thedata.newrequestor2 is my 2nd thedata.newrequestor3 is my 3rd etc. on and on

How can I handle this in jquery, or do I have to start different in coldfusion cfc??


回答1:


You could just call the remote function and let ColdFusion serialize the query object to JSON? (notice 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 formatting will look like this:

{"COLUMNS":["NEWREQUESTER","NEWREQUESTERUSERNAME"],"DATA":[["1","JOHN DOE"],["2","JIM DOE"]]}



回答2:


Store your users in an array and return that array.

<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 />

That creates an array of objects in javascript like this:

[
    {
        newrequestrr:"foobar",
        newrequestorusername:"foobar",
        ...
    },
    ...
]

Update: I made code a little more dynamic. I use a custom function in my udf library to make this conversion from query structure to array of rowstructs, I modified it to use your variables.




回答3:


If you want something with the normal json structure, you are going to have to create it. If you're battling with CORS, PM me. I am using this on an Angular 7 front end. Remove the returnType="query" from your cffunction tag; it just returns the half baked quasi json format. Hope this helps someone.

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


来源:https://stackoverflow.com/questions/10095520/coldfusion-cfc-return-json-display-in-jquery-how-do-i-handle-multiple-records-f

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!