使用jQuery serialize()发送保存表单数据(使用ColdFusion 9)

时间:2016-04-20 18:48:22

标签: jquery coldfusion

我正在创建一个新表单,我想我会把jQuery的serialize()带出来。这是一个全新的形式,所以我还没有锁定表单字段名称(所有绿地工作)。

我可以选择使用任一数据集(密切关注等号 - 此输出不是拼写错误):

data=userId=99&firstName=John&lastName=Doe&interestName=2&interestName=8&sdf&interestName=5data=userId=99&firstName=John&lastName=Doe&interestName_1=2&interestName_2=8&sdf&interestName_3=5

我目前的解决方案并不漂亮,条件逻辑也不容易维护。现在我已经解释了我的循环,这里是一个很难看的代码:

<cfoutput>  
    <cfloop list="#url.data#" index="i" delimiters="&">
        <cfset key = listfirst(i,'=')>
        <cfset keyValue = listlast(i,'=')>
    <cfif key eq 'userId'>
        <cfset userId = keyValue>
    </cfif>
    <cfif key contains 'interestName_'>         
        <cfquery name="rsInsert" datasource="playground">
            insert into table (optionId,userId)
                values
                (#keyValue#,#userid#)
        </cfquery>
    </cfif>
</cfloop>
</cfoutput>

有哪些选项可以提高效率?

1 个答案:

答案 0 :(得分:1)

如果可能的话,在任何编程语言中都应该总是避免对循环的每次迭代执行db操作。在这种情况下,您可以将循环移动到<cfquery>内部并执行多重插入。您还可以通过在循环外部移动INSERT INTO (...)部分来进一步减小查询的大小,具体取决于数据库支持。这当然取决于数据源设置中允许的多插入。

<cfquery name="rsInsert" datasource="playground">
    <cfloop list="#url.data#" index="i" delimiters="&">
        <cfset key = listfirst(i,'=')>
        <cfset keyValue = listlast(i,'=')>
        <cfif key eq 'userId'>
            <cfset userId = keyValue>
        </cfif>
        <cfif key contains 'interestName_'>         
            insert into table (optionId,userId)
                values
                (#keyValue#,#userid#);
        </cfif>
    </cfloop>
</cfquery>

不要忘记阻止sql注入。