Ich baue eine Webseite, die bei der Webformular-Übermittlung einen AJAX-Anruf tätigt. AJAX ruft dann eine cfc auf, in der eine Funktion eine gespeicherte SQL-Prozedur aufruft, die die Webformularwerte als Eingabeargumente übergibt. Bis hier ist in Ordnung, aber ich bin verwirrt darüber, wie Daten zurück an die aufrufende AJAX-Funktion zurückgegeben werden, wenn mehrere Ergebnismengen von der gespeicherten Prozedur zurückgegeben werden.Mehrere cfquery-Ergebnisse zurück an AJAX-Aufruf zurückgeben
Um es klarer zu machen, hat die gespeicherte Prozedur intern viele SELECT-Transaktionen und jeder von diesen wird als Teil von cfprocresult im cfstoredproc erfasst. Wenn es nur ein cfprocresult war, scheint es einfach, es an AJAX zurückzugeben, aber wie sende ich mehrere cfprocresult-Ergebnisse zurück an die aufrufende AJAX-Funktion?
Pseudo-Code unten:
AJAX: ---------
$.ajax(
{
type: “post”,
url: "Contacts.cfc",
data: {
method: "retrieveCustomers",
username: this.DOMReferences.Name.val(),
},
dataType: "json",
success: function(objResponse){
if (objResponse.SUCCESS){
// rest of AJAX to process returned data here
Contacts.cfc ---------
<cfcomponent>
<cffunction name="retrieveCustomers" returntype="query">
<cfstoredproc datasource="#application.dsn_spoon#" procedure="proc_getUsers_paged">
<cfprocparam cfsqltype="cf_sql_varchar" value="#username#">
<cfprocresult name="qResult1" resultset="1">
<cfprocresult name="qResult2" resultset="2">
<cfprocresult name="qResult3" resultset="3">
</cfstoredproc>
// how do i return all 3 result sets back to calling AJAX function?
</cffunction>
</cfcomponent>
HINWEIS: Ich habe sehr wenig Kontrolle, um die Logik der gespeicherten Prozedur zu ändern. Die vorhandene Webseite verwendete beim Aufrufen der cfstoredproc-Komponente eine Aktualisierung der Seite selbst und verwendete AJAX nicht. Ich schreibe die Benutzeroberfläche neu, um stattdessen AJAX zu verwenden.
Danke!
Ich denke, was Sie tun können, ist eine Struktur erstellen und speichern Sie die Ergebnismengen darin. Verwenden Sie anschließend die SerializeJSON-Funktion, um die Struktur in JSON zu konvertieren, und geben Sie sie als Antwort an Ajax zurück. Sobald Sie die Ajax-Antwort erhalten haben, müssen Sie nur noch analysieren und manipulieren. –
Auch wenn Sie Ihre CFC-Funktion direkt mit Ajax aufrufen, müssen Sie access = remote setzen und returntype = JSON setzen –
@Keshavjha - Danke. Ich denke, ich verstehe den Ansatz jetzt. Werde es irgendwann ausprobieren! – maverick