0

我有一个非常标准的联系表格,现在使用 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>
4

2 回答 2

1

这是我希望 24/7 全天候在我手边拥有一台服务器的又一次...

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

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

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

于 2010-08-25T19:55:47.520 回答
0

通过将其序列化为 JSON 来准备您的 javascript 数组。一种简单而严格的方法是使用 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 对象/结构(与本示例中的简单数组相反)。

于 2010-08-25T23:31:14.350 回答