2012-03-02 34 views
6

Ho una variabile di sessione ColdFusion che è una struttura di dati. Il mio obiettivo è quello di eseguire una chiamata jQuery che fa una delle due cose tramite Ajax:Passaggio e restituzione di ColdFusion Structure tramite JQuery

  1. invia che ColdFusion struttura ad un metodo di componente ColdFusion, aggiorna un elemento di tale struttura con una stringa di nuova creazione, e restituisce la stessa struttura indietro.

o

  1. esegue un metodo componente ColdFusion che crea una nuova stringa, restituisce quella stringa, e assegna che nuova stringa a un elemento di quella stessa struttura della sessione ColdFusion dopo la chiamata Ajax.

Penso che sarebbe facile, ma ho avuto qualche problema. Qualcuno sa cosa avrei bisogno di fare?

risposta

10

Bene, la struttura della sessione CF e jQuery operano in due diversi ambiti: CF sul server e jQuery nel browser. Per "inviare quella struttura ColdFusion a un [cfc] ..." dall'Ajax, dovrai serializzare la struttura della sessione come una stringa json e poi trasmettere la stringa json al client in qualche modo. Molto probabilmente, si vorrà fare questo come parte del rendering della pagina per il cliente:

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

quindi è possibile utilizzare la variabile jsonStruct dal codice jQuery, se necessario (come un oggetto reale JS). Quando è necessario inviare di nuovo a CF, è possibile serializzare nuovamente sul lato Javascript, in questo modo:

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

noti che si dovrebbe includere json2.js di fare la serializzazione, dal momento che alcuni browser tosse IE tosse non supportano JSON.stringify() in modo nativo.

Aggiornamento

Ho aggiornato il codice jQuery esempio per mostrare come è possibile aggiornare l'oggetto JavaScript per utilizzare la risposta dal CFC. Per funzionare correttamente, il tuo CF dovrà assomigliare a questo:

<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

Quindi uso SerializeJSON per creare quel jsonStruct da inviare al componente CF. JSON.stringify lo rende una struttura in CF corretta? Quando restituisco la struttura nel successo, come posso assegnare la struttura della sessione modificata alla struttura della sessione corrente nella pagina originale? – user1100412

+0

SerializeJSON è una funzione CF che accetta un oggetto CF e lo esegue come stringa. JSON.stringify è una funzione javascript che accetta un oggetto javascript e lo esegue come stringa. –

+0

Ho aggiornato la risposta per mostrare come si va avanti e indietro tra CFC e jQuery. –