Передача и возврат ColdFusion Structure через JQuery - PullRequest
6 голосов
/ 03 марта 2012

У меня есть переменная сеанса ColdFusion, которая представляет собой структуру данных.Моя цель - выполнить вызов jQuery, который выполняет одну из двух вещей через Ajax:

  1. отправляет эту структуру ColdFusion в компонентный метод ColdFusion, обновляет элемент этой структуры с помощью вновь созданной строки и возвращаетта же структура обратно.

или

  1. выполняет метод компонента ColdFusion, который создает новую строку, возвращает эту строку и назначает эту новую строку элементу той же самойСтруктура сеанса ColdFusion после вызова Ajax.

Я думаю, это будет легко, но у меня возникли некоторые проблемы.Кто-нибудь знает, что мне нужно сделать?

1 Ответ

11 голосов
/ 03 марта 2012

Хорошо, структура сеанса CF и jQuery работают в двух разных сферах - CF на сервере и jQuery в браузере. Чтобы «отправить эту структуру ColdFusion в [cfc] ...» из Ajax, вам нужно будет сериализовать структуру сеанса в виде строки json, а затем каким-то образом передать эту строку json клиенту. Скорее всего, вы захотите сделать это как часть визуализации страницы для клиента:

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

Затем вы можете при необходимости использовать переменную jsonStruct из вашего кода jQuery (как настоящий объект JS). Когда вам нужно отправить его обратно в CF, вы можете снова его сериализовать на стороне Javascript, например:

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

Обратите внимание, что вы должны включить json2.js для выполнения сериализации, поскольку некоторые браузеры кашляют IE кашляют не поддерживают JSON.stringify() изначально.

Обновление

Я обновил пример кода jquery, чтобы показать, как вы можете обновить объект javascript, чтобы использовать ответ от CFC. Для правильной работы ваш CF должен выглядеть примерно так:

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