Invoca la función ColdFusion usando AJAX

Necesito invocar una función de ColdFusion (presente en un archivo .cfm) cuando el usuario hace clic en un enlace. Y me gustaría hacerlo usando jQuery. Tengo un fragmento de jQuery que se ve como …

 $(document).ready(function(){ $("td.ViewLink a").click(function(event){ event.preventDefault(); )} 

Soy nuevo en jQuery y AJAX, por lo que podría sonar ingenuo aquí. ¿Debo usar AJAX para invocar la función ColdFusion? Algo así como solicitar ejecutar una función específica en el servidor.

Cualquier ayuda en este sentido es apreciada.

Aclamaciones.

Si tiene varias funciones en su cfm (incluso si no las tiene), colóquelas en un cfc. Luego puede usar el siguiente patrón de url para invocar un método específico.

cfc llamado myEntityWS.cfc

     your code here   #cfcatch.Detail#
#cfcatch.Message#
#cfcatch.tagcontext[1].line#:#cfcatch.tagcontext[1].template#

Javascript

 $.get('myEntityWS.cfc?method=updateDescription&value=someValue'); 

No puedes hacer exactamente lo que intentas en tu código de ejemplo. Sin embargo, tienes algunas opciones.

Método 1: objeto accesible remotamente

Mueva sus funciones a un CFC y acceda a ellas a través de la URL del CFC. Este método de acceso requiere que la función use el atributo de permiso access='remote' – si se establece en público (predeterminado) o privado, (o paquete, o cualquier nivel de rol, etc.) entonces obtendrá un error de método no encontrado cuando intenta acceder a él de forma remota.

Al hacer esto, estás creando un servicio web SOAP y consumiéndolo a través de AJAX. Para ello, utiliza el siguiente formato en tu solicitud de jQuery:

 http://domain.com/path/to/your.cfc?method=functionName&argument1=arg1Val&foo=bar&... 

Si tiene ColdFusion 8, también puede especificar el returnFormat='format' url, que convertirá los objetos de datos nativos de ColdFusion que regrese al formato solicitado sobre la marcha. Es compatible con JSON, XML y WDDX.

foo.cfc

    ...    

Acceso por URL:

 http://domain.com/path/to/foo.cfc?method=foobar&arg1=some%20value&returnFormat=JSON 

Método 2: objeto proxy remoto

El lado negativo de la aproximación n. ° 1 es que se produce un pequeño golpe de eficacia al crear instancias de CFC, por lo que si este método particular de AJAX se ejecuta con mucha frecuencia, y / o si su CFC contiene más de unos pocos métodos o más de un centenar de líneas , no desea crear una instancia una y otra vez para cada solicitud. En su lugar, le conviene examinar el patrón de proxy remoto , donde almacena en caché el CFC que implementa la funcionalidad en el ámbito de aplicación y tiene un CFC de “proxy remoto” separado que es mucho más liviano y simplemente actúa como un proxy (de ahí el nombre) entre la solicitud http y el CFC en caché.

En este patrón, su objeto comercial (el que tiene la función que hace el trabajo real) puede tener access=public (o paquete, etc.), siempre que el proxy tenga acceso a él. El proxy en sí mismo debe tener access=remote , sin embargo.

proxy.cfc

        

Acceso por URL:

 http://domain.com/path/to/proxy.cfc?method=foobar&arg1=some%20value&returnFormat=JSON 

Método 3: Hágalo usted mismo

Por último, puede implementar manualmente la invocación de función y devolverla en una plantilla de CFM. Este método no implica el impacto (leve) en el rendimiento de escribir un CFC, pero será más tipeado para usted y puntos de falla potenciales adicionales. Para ello, incluya sus funciones en la plantilla de CFM y trate la secuencia de salida como solo eso: una secuencia de texto que se devolverá al navegador.

Debe tener cuidado de administrar espacios en blanco en el valor de retorno (use output=false en las definiciones de funciones, considere usar , y solo tenga cuidado con su espaciado general). Si su solicitud jQuery espera que JSON vuelva, debe serializarla. (Si necesita serializar datos a JSON en ColdFusion 6 o 7, recomiendo JSONUtil )

Con este enfoque, apunta su solicitud AJAX al archivo .cfm con parámetros de URL, y luego necesita escribir el código que toma esos parámetros de la url y los pasa a la función, y luego muestra (esencialmente, vuelve a la solicitud AJAX) el resultado de la función.

foo.cfm

     ...    #serializeJSON(variables.result)# 

Acabo de ver esta publicación. Estoy usando un cfc y jquery ajax para mostrar un montón de valores calculados. Mi cfc tiene lo siguiente:

   this.init();          #arguments.salesPrice#     

Yo uso JQuery.ajax:

  $.ajax({ type:"POST", url:"financeTerms.cfc?method=getFinanceTerms", data: "sales_price=55000&interestRate=5.99", cache:false, success: function(msg) { $("#someDiv").html(msg); } }); 

Tal vez, será útil para otra persona …

No es necesario que utilice “AJAX” (la parte XML, específicamente), pero puede usar una llamada a un servidor remoto:

 $.get('/execute-function.cfm?func=whatever', function (result) { $('#result').html(result); }); 

Realmente depende de lo que tiene que hacer con el resultado. El código anterior colocará el resultado HTML en un div en su página:

 

Podría usar una llamada asíncrona y analizar XML, pero he descubierto que rara vez lo necesito.

Puede probar la etiqueta en CF8 si lo desea.

¡Usar una variable ColdFusion en JavaScript es poderoso! Asegúrate de usar

  var #toScript(ColdFusionVAR, 'javascriptVar')#  

Ahora puede hacer referencia a su variable como javaScriptVar usando CFAJAXPROXY

Asegúrate de incluir esto en tu plantilla

    

Usando tu clase en el lado de JavaScript.

Nos gustaría así.

 var JS_CFC_Obj; JS_CFC_Obj = new jsCFCclassName() 

Ahora puede hacer llamadas a funciones dentro de ese cfc.

 jsCFCclassName.functionName(javascript var);