2012-03-02 30 views
6

Tengo una variable de sesión ColdFusion que es una estructura de datos. Mi objetivo es ejecutar una llamada jQuery que hace una de dos cosas a través de AJAX:Pasar y regresar a ColdFusion Structure a través de JQuery

  1. envía esa estructura ColdFusion a un método de componentes de ColdFusion, actualiza un elemento de esa estructura con una cadena de nueva creación, y devuelve la misma estructura espalda.

o

  1. ejecuta un método componente de ColdFusion que crea una nueva cadena, devuelve esa cadena, y asigna esa nueva cadena en un elemento de esa misma estructura de la sesión de ColdFusion después de la llamada Ajax.

Creo que sería fácil, pero he tenido algunos problemas. ¿Alguien sabe lo que tendría que hacer?

Respuesta

10

Bueno, la estructura de sesión CF y jQuery funcionan en dos esferas diferentes: CF en el servidor y jQuery en el navegador. Para "enviar esa estructura ColdFusion a un [cfc] ..." desde Ajax, tendrá que haber serializado la estructura de la sesión como una cadena json y luego transmitir esa cadena json al cliente de alguna manera. Lo más probable es que usted querrá hacer esto como parte de la representación de la página al cliente:

<cfoutput>var jsonStruct = #SerializeJSON(session.myStruct)#;</cfoutput> 

continuación, puede utilizar la variable jsonStruct a partir del código de jQuery, según sea necesario (como un objeto real JS). Cuando tenga que enviarlo de vuelta a CF, puede serializar de nuevo en el lado Javascript, así:

$.ajax({ 
    url: "foo.cfc?method=myMethod", 
    dataType: "json", 
    data: {myStruct: JSON.stringify(jsonStruct)}, 
    success: function (respJSON) { 
     jsonStruct = respJSON; 
    } 
}); 

en cuenta que debe incluir json2.js hacer la serialización, ya que algunos navegadores tos IE tos no es compatible con JSON.stringify() de forma nativa.

actualización

He actualizado el ejemplo de código jQuery para mostrar cómo se puede actualizar el objeto javascript para usar la respuesta de la CFC. Para que funcione correctamente, el CF tendrá que ser algo como esto:

<cffunction name="myMethod" access="remote" returnFormat="json"> 
    <cfargument name="myStruct" type="string"> 

    <cfset var realStruct = DeserializeJSON(arguments.myStruct)> 

    <cfset session.myStruct = realStruct><!--- or whatever you want to do with it at this point ---> 

    <cfreturn session.myStruct> 
</cffunction> 
+0

así que utilizo para crear SerializeJSON que jsonStruct para enviar al componente CF. JSON.stringify lo convierte en una estructura en CF correcta? Cuando devuelvo la estructura al éxito, ¿cómo vuelvo a asignar la estructura de sesión modificada a la estructura de sesión actual en la página original? – user1100412

+0

SerializeJSON es una función CF que toma un objeto CF y lo representa como una cadena. JSON.stringify es una función de JavaScript que toma un objeto javascript y lo representa como una cadena. –

+0

He actualizado la respuesta para mostrar cómo va y viene entre CFC y jQuery. –