如何使用可在ColdFusion函数中使用的jQuery创建适当的表单元素数组?

时间:2010-08-25 19:24:39

标签: jquery coldfusion cfc

我有一个非常标准的联系表单,现在使用cfc进行处理。我想对打开javascript的用户使用.post。我已经使用表单元素的jQuery创建了一个数组,我想将它传递给同一个CFC(不修改CFC),但我不确定如何做到这一点。基本上,我想将一个名为'formData'的东西作为参数传递给CFC(就像我只使用基本的服务器端代码一样),然后在CFC中解析它。现在我只是在cfc中使用cfdump(非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 个答案:

答案 0 :(得分:1)

这是另一个当我希望我的服务终端24/7服务器的时候......

仔细观察您的CFC,看起来您需要将formData作为结构。但是,IIRC,JSON被认为是一个字符串,您必须手动反序列化它。

尝试将类型更改为字符串,或完全删除它。

编辑:看起来jquery.post()发送标准的http帖子,而不是AJAX / webservice调用。因此,如果我正确理解所有分散的文档,那么内容将被放入表单范围。

答案 1 :(得分:0)

通过将javascript数组序列化为JSON来准备它。 Crockford的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数组。同样的事情适用于分别在javascript和CF之间传输js对象/结构(与本例中的简单数组相反)。