Как создать соответствующий массив элементов формы с jQuery, который можно использовать в функции ColdFusion? - PullRequest
0 голосов
/ 25 августа 2010

У меня довольно стандартная контактная форма, которая сейчас использует cfc для обработки.Я хочу использовать .post для пользователей, у которых включен JavaScript.Я создал массив с jQuery элементов формы, и я хочу передать его в тот же CFC (без изменения CFC), но я не уверен, как это сделать.По сути, я хочу передать что-то под названием «formData» в качестве аргумента CFC (как я делаю только с базовым кодом на стороне сервера), а затем проанализировать его в CFC.Сейчас я просто использую cfdump в cfc (который отлично работает с отправкой без java), но он не работает с этой настройкой.Есть идеи?

Вот мой jQuery

$('#theForm').submit(function(e) {
    e.preventDefault();

    var formData = {};
    $('form [name]').each(function(){
        formData[this.name] = this.value;
    });
    $.post("cfc/engine.cfc?method=collectdata&returnformat=json",
           {'formData': formData}
           );
});

И мой CFC

<cffunction name="collectdata" access="remote" output="false" returntype="void">
  <cfargument name="formData" type="struct" required="yes">
  <cfdump var="#formData#">
  <cfabort>
</cffunction>

Ответы [ 2 ]

1 голос
/ 25 августа 2010

Это еще один из тех случаев, когда мне хотелось бы, чтобы у меня был сервер под рукой 24/7 ...

Если присмотреться к вашему CFC, похоже, что вам требуется, чтобы formData была структурой. Тем не менее, IIRC, JSON считается строкой, и вам придется десериализовать его вручную.

Попробуйте изменить тип на строку или полностью удалить его.

Редактировать: Похоже, jquery.post () отправляет стандартное сообщение http, а не вызов AJAX / webservice. Таким образом, содержимое будет помещено в область видимости формы, если я правильно понимаю все разбросанные документы.

0 голосов
/ 26 августа 2010

Подготовьте свой массив JavaScript, сериализовав его в JSON.Простой и строгий способ сделать это с помощью Crockford's json2js .Таким образом, у вас будет:

<script src="json2.js"></script>

... и затем:

var your_params = [ 'this','that','theother' ]; // your js array
var s_params = JSON.stringify( your_params ); // now as json

... и затем в вашем .post():

{'formData': s_params}

Установите ваш cfc для получения аргумента типа string (или any).В cfc используйте deserializeJson() для входящего аргумента:

<cffunction name="collectdata" output="false" access="remote" returntype="void">
  <cfargument name="formData" type="string" required="yes">
  <cfset var result = deserializejson(arguments.formData)><!--- make a CF array --->
  <cfset var foo = isArray(result)> <!--- TRUE! --->
  <!--- ... etc ... --->
</cffunction>

Итак, вы взяли массив javascript, сериализовали его в JSON, отправили его в ваш cfc, который получил его как строку, а затем десериализовалиэто к "родному" массиву CF.То же самое будет работать для переноса js-объектов / структур между javascript и CF соответственно (в отличие от простого массива в этом примере).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...