AJAX的最佳方式是提交具有未知数量元素的表单

vol*_*one 0 coldfusion jquery coldfusion-10

这是一个逻辑/最佳实践问题,而不是纯编程,所以如果它违反规则就道歉.

我正在使用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
      }
 });
Run Code Online (Sandbox Code Playgroud)

表单被提交给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>
Run Code Online (Sandbox Code Playgroud)

主要问题:我现在有一个可以包含0-infinity <input type="file" name="upload1" />元素的表单,因为它们是由用户点击"添加文件"按钮动态生成的.每次单击此按钮时,<li>都会生成一个带有新输入字段的new.

因为我不知道该人想要上传多少文件,所以我似乎无法设置CFC来处理它们.我正在考虑这个选项来处理这种情况:

  1. 像这样在JQuery中创建一个变量:var numoffiles = $('#FileUploader ul li').size();它计算<li>我在FileUploader div中有多少元素.然而,这必须是用户想要上传的文件数量.然后我必须在表单提交中将此号码传递给CFC,以便它动态创建适当数量的CFARGUMENTS来处理上传的文件名.它必须创建这些CFARGUMENTS才能映射键:值对.我不确定它是否可以做到这一点.

任何人都可以建议另一种方式或更好的方法来做到这一点?我想我在某个地方错过了一个技巧,因为我的解决方案看起来有点原始.

gfr*_*ius 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...
Run Code Online (Sandbox Code Playgroud)

注意:由于您说它可能是无穷大,您应该记下Cf10中的新设置:"POST请求参数的最大数量".您可能必须从默认值中提取此数字,我认为是100.如果您低于ColdFusion 10,则可以在其中一个xml文件中编辑此设置.你可以在这里阅读:http://helpx.adobe.com/coldfusion/kb/coldfusion-security-hotfix.html

  • 对于ColdFusion 10,可以在xml文件或CF管理员中调整"最大POST请求参数数".http://stackoverflow.com/questions/14882788/how-to-change-the-amount-of-fields-that-c​​an-be-posted-in-a-form-with-iis-7-5 (4认同)