2012-12-30 10 views
5

Ich bin neu in jquery und versuche, Funktionen zu machen, die meine Datenbank mit einem Dialogfeld aufrufen und aktualisieren. Ich habe eine vorhandene Vorlage geändert, um den folgenden Code zu erzeugen, und kann nicht die Funktion savefee aufrufen, die von der jquery-Funktion aufgerufen wird. Es gibt keine Fehler in meiner Javascript-Konsole. Jede Hilfe wird geschätzt.Jquery arbeitet nicht mit callfusion cfc

`

<cfset getfees = new artservice().getfees()> 

<html> 
<head> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script> 

<script> 
$(document).ready(function() { 

    $(".artdiv").click(function() { 
     var initialDiv = this; 

     //based on which we click, get the current values 
     var feeid = $(this).data("fee_id"); 
     var feetitle = $("h2", this).text(); 

     // set form values 
     $("#fee_id").val(feeid);   
     $("#fee_title").val(feetitle); 

     $("#editForm").dialog({ 
      buttons: { 
       "Save": function() { 
        var thisDialog = $(this); 
         $.post("artservice.cfc", { 
         method: 'savefee', 
         fee_id: $("#fee_id").val(), 
         fee_title: $("#fee_title").val() 
         }, 
        function() { 
         //update the initial div 
         $("h2", initialDiv).text($("#fee_title").val()); 
         $(thisDialog).dialog("close"); 
        }); 
       } 
      } 
     }); 
    }); 

}); 
</script> 
<style> 
.artdiv { 
    padding: 5px; 
    margin: 5px; 
    background-color: #80ff80; 
} 
#editForm { 
    display:none; 
} 
</style> 
</head> 

<body> 

<cfoutput query="getfees"> 

    <div class="artdiv" data-fee_id="#fee_id#"> 
     <h2>#fee_title#</h2> 
    </div> 

</cfoutput> 

<div id="editForm" title="Edit Art"> 
    <input type="hidden" id="fee_id"> 
    <p> 
    <b>Name:</b><br/> 
    <input type="text" id="fee_title"> 
    </p> 

</div> 

</body> 
</html> 

`

CFC ist unter

`

<cffunction name="getfees" access="public"> 
    <cfquery datasource="dsn" name="getfees" maxrows="10">select fee_id, fee_title from table</cfquery> 
    <cfreturn getfees> 
</cffunction> 

<cffunction name="savefee" access="public"> 
<cfargument name="fee_id" required="yes"> 
<cfargument name="fee_title" required="yes"> 
<cfquery datasource="dsn">update table set fee_title = '#arguments.fee_title#' where fee_id = #fee_id#</cfquery> 
</cffunction> 

`

Fehler war mit dieser Funktion in Application.cfc „Das ARGS Argument an die Funktion übergeben onCFCRequest ist nicht vom Typ string“

public void function onCFCRequest(required string cfcname, required string method, required string args) { 

    return; 
} 
+1

Inspect AJAX-Anfrage in der Browser-Konsole ... wird es gemacht? Ist der Status 200? korrekte Daten gesendet? ... scheint kein cfoutput zu sein ... sollte es sein? Konsole wird dazu beitragen, Server- und Client-Probleme einzugrenzen – charlietfl

+0

Ja AJAX-Anfrage wird gestellt. Der Status ist 200. Ich erhalte einen Fehler bei der Antwort "Das ARGS-Argument, das an die onCFCRequest-Funktion übergeben wurde, ist nicht vom Typ string", der sich in meiner application.cfc-Datei befand (getrennt von dieser). Code ist unten. Ich habe die Funktion auskommentiert und es funktioniert jetzt gut. Ideen, warum das passiert ist. '\t public void function onCFCRequest (erforderliche Zeichenfolge cfcname, erforderliche Zeichenfolgenmethode, erforderliche Zeichenfolgenargumente) { \t \t \t zurückgeben; \t} ' – eduski

+0

vorschlagen aktualisieren Frage mit Fehler ... persönlich bin ich mehr Front-End, Coldfusion, vor allem CFC, ist nicht meine Stärke. Kann aber einen gemeinen '' Tag schreiben! .... praktisch für Ajax manchmal – charlietfl

Antwort

4

Der Fehler, den Sie wegen der falschen Funktionsdefinition von 'onCFCRequest' erhalten. Das dritte Argument dieser Funktion ist ein Strukturtyp, aber Sie haben den Typ als Zeichenfolge festgelegt. So sollte die richtige Definition sein.

public void function onCFCRequest(required string cfcname, required string method, required struct args) { 

    return; 
} 

Auch eine weitere Sache, wenn Sie diese Funktion in der Application.cfc erklären, dann müssen Sie manuell den Funktionsaufruf innerhalb des ‚onCFCRequest‘ behandelt. So etwas wie Sie müssen erneut die Anfragefunktion in onCFCRequest aufrufen.

+0

Zwei weitere Fragen - 1) Ist es notwendig diese Funktion zu deklarieren? 2) Deine letzten zwei Sätze haben mich verloren - kannst du ein Beispiel geben? – eduski

+0

@eduski - 'onCFCRequest' wird aufgerufen * anstelle von * der angefragten cfc-Methode. Da Ihre 'onCFCRequest'-Funktion leer ist, wird sie Anfragen nach cfc's abfangen und dann nichts tun. Wenn Sie den angeforderten cfc automatisch aufrufen möchten, müssen Sie innerhalb von 'onCFCRequest' Code hinzufügen. Das vollständige Beispiel finden Sie unter [am Ende der Dokumentation] (http://help.adobe.com/de_DE/ColdFusion/9.0/CFMLRef/WSe821657cd7d6f83f6daaa733122cf6931bb-8000.html). (Leider ist der Code nicht dynamisch, aber demonstriert das Konzept). – Leigh

+1

@ eduski- Antwort auf Ihre Fragen. 1) Es hängt von Ihnen ab, wie Sie es verwenden möchten. Wenn Sie 'onCFCRequest' implementieren, haben Sie mehr Kontrolle über Ajax-, Web Service- und Flash Remoting-Anfragen an Ihren CFC. Es kann als zusätzliche Sicherheitsschicht auf Ihrem CFC-Server verwendet werden. Wenn Sie diese Funktion nicht verwenden möchten, können Sie das nicht tun. 2) Ich denke, Leigh hat diese Frage bereits beantwortet. Danke an Leigh. –

5

Ihre Funktionen müssen auf access="remote" eingestellt werden, da sie durch den Browser direkt an den CFC aufgerufen wird.

+0

Nur die zweite tatsächlich. Die Funktion getFees wird mit dem ColdFusion-Code aufgerufen, der in der ersten Zeile angezeigt wird. –

+0

Sollte eigentlich cfcomponent als Container haben. Ansonsten ist dies eine Liste von Funktionen. – user1261365

+0

Und parametrieren Sie Ihre Abfragen, anstatt Daten direkt aus der URL in Ihre DB zu leiten! Das ist ein Rezept für eine Katastrophe. Oh: und VAR deine Variablen in deinen Funktionen. –