2012-12-30 9 views
5

Sono nuovo di jQuery e sto cercando di creare funzioni che chiameranno e aggiorneranno il mio database con una finestra di dialogo. Ho modificato un modello esistente per produrre il codice sottostante e non posso ottenere la funzione savefee per essere chiamata dalla funzione jquery. Non ci sono errori nella mia console javascript. Qualsiasi aiuto è apprezzato.Jquery non funziona con la chiamata a coldfusion 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 è al di sotto

errore

`

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

`

fu con questa funzione in Application.cfc 012."L'argomento ARG passato alla funzione onCFCRequest non è di tipo stringa"

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

    return; 
} 
+1

ispezionare la richiesta AJAX nella console del browser ... è in corso? Lo stato è 200? dati corretti inviati? ... non sembra essere alcun cfoutput ... dovrebbe esserci? La console aiuterà a restringere i problemi server vs client – charlietfl

+0

Sì La richiesta AJAX è in corso. Lo stato è 200. Ricevo un errore nella risposta "L'argomento ARGS passato alla funzione onCFCRequest non è di tipo stringa" che era nel mio file application.cfc (separato da questo). Il codice è sotto Ho commentato la funzione e ora funziona bene. Idee perché questo è successo. '\t public void function onCFCRequest (stringa richiesta cfcname, metodo stringa richiesto, stringa necessaria args) { \t \t \t ritorno; } ' – eduski

+0

suggerisco di aggiornare la domanda con errore ... personalmente sono più front end, coldfusion, in particolare CFC, non è il mio punto di forza. È possibile scrivere un tag ' medio!!! A portata di mano per ajax a volte – charlietfl

risposta

4

L'errore che si ottiene a causa della funzione non corretta definizione di 'onCFCRequest'. Il terzo argomento di questa funzione è un tipo di struttura ma il tipo è stato creato come stringa. Quindi la definizione corretta dovrebbe essere simile.

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

    return; 
} 

Inoltre, un'altra cosa se si dichiara questa funzione nel Application.cfc allora avete bisogno di gestito manualmente la chiamata di funzione all'interno del 'onCFCRequest'. Qualcosa come hai bisogno di richiamare nuovamente la funzione di richiesta all'interno di onCFCRequest.

+0

Due domande di follow-up - 1) È addirittura necessaria la dichiarazione di questa funzione? 2) le tue ultime due frasi mi hanno perso - puoi fornire un esempio? – eduski

+0

@eduski - 'onCFCRequest' viene invocato * anziché * il metodo cfc richiesto. Dato che la funzione 'onCFCRequest' è vuota, intercetterà le richieste per cfc, quindi non farà nulla. Se si desidera richiamare automaticamente il cfc richiesto, è necessario aggiungere del codice all'interno di 'onCFCRequest'. Vedere l'esempio completo in [nella parte inferiore della documentazione] (http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSe821657cd7d6f83f6daaa733122cf6931bb-8000.html). (Sfortunatamente il codice non è dinamico, ma dimostra il concetto). – Leigh

+1

@ eduski- Rispondi alle tue domande. 1) Dipende da te come vuoi usarlo, se implementi 'onCFCRequest' allora hai più controllo sulle richieste Ajax, Web Service e Flash Remoting sul tuo CFC. Può essere utilizzato come ulteriore livello di sicurezza sulla parte superiore del tuo CFC. Se non vuoi usare questa funzione, puoi farlo senza grossi problemi. 2) Penso che Leigh abbia già risposto a questa domanda. Grazie a Leigh. –

5

Le funzioni devono essere impostate su access="remote" dal momento che sono chiamati dal browser direttamente al CFC.

+0

Solo il secondo in realtà. La funzione getFees viene chiamata con il codice ColdFusion che è la prima riga visualizzata. –

+0

Dovrebbe davvero avere cfcomponent anche come contenitore. Altrimenti questo è un elenco di funzioni. – user1261365

+0

E parametrizza le tue query piuttosto che passare i dati direttamente dall'URL al tuo DB! Questa è una ricetta per il disastro. Oh: e VAR le tue variabili nelle tue funzioni. –

Problemi correlati