我有一个非常标准的联系表单,现在使用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>
答案 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对象/结构(与本例中的简单数组相反)。