这是一个逻辑/最佳实践问题,而不是纯编程,所以如果它违反规则就道歉。
我正在使用JQuery的AJAX功能提交我的一些表单:
$.ajax({
type: "POST",
url: form-actions.cfc?method=NewSubmission,
data: $('#form1').serialize(),
success: function (result) {
// alert user of success
}
error: function (result) {
// alert user of success
}
});
表单被提交给ColdFusion组件,该组件获取已经序列化的表单的所有参数,并在插入SQL数据库之前将它们放入变量中。这是一个例子:
<cfcomponent>
<cffunction name="NewSubmission" access="remote" hint="Saves or Submits New Submission" returntype="JSON">
<cfargument name="CustomerID" type="numeric" />
<cfargument name="Name" type="any" />
<cfargument name="DOB" type="any" />
<cfquery>
...the cfarguments automatically map to the key:value pairs
submitted by JQuery and insert into SQL here...
</cfquery>
</cffunction>
</cfcomponent>
主要问题:我现在有一个表格可以包含0-infinity <input type="file" name="upload1" />
元素,因为它们是由用户点击“添加文件”按钮动态生成的。每次单击此按钮时,都会生成一个带有新输入字段的新<li>
。
因为我不知道该人想要上传多少文件,所以我似乎无法设置CFC来处理它们。我正在考虑这个选项来处理这种情况:
var numoffiles = $('#FileUploader ul li').size();
计算我在FileUploader div中有多少<li>
个元素。然而,这必须是用户想要上传的文件数量。然后我必须在表单提交中将此号码传递给CFC,以便它动态创建适当数量的CFARGUMENTS来处理上传的文件名。它必须创建这些CFARGUMENTS才能映射键:值对。我不确定它是否能做到这一点。有人可以建议另一种方式或更好的方法吗?我想我在某个地方错过了一个技巧,因为我的解决方案看起来有点原始。
答案 0 :(得分:5)
不要担心创建一个计数器,这样做......
<!---this cfset is for demo purposes, you will leave this line out--->
<cfset form.fieldnames="someOtherFieldsYouMayHave,upload1,upload2,upload3,upload4,upload5">
<cfloop list="#form.fieldnames#" index="i">
<cfif left(i,6) eq "upload">
<cfoutput>processing #i#...<br/></cfoutput>
</cfif>
</cfloop>
output:
processing upload1...
processing upload2...
processing upload3...
processing upload4...
processing upload5...
注意:由于您说它可能是无限的,您应该记下Cf10中的新设置:“POST请求参数的最大数量”。您可能必须从默认值中提取此数字,我认为是100.如果您低于ColdFusion 10,则可以在其中一个xml文件中编辑此设置。您可以在此处阅读:http://helpx.adobe.com/coldfusion/kb/coldfusion-security-hotfix.html