如何在ColdFusion9中构建动态cfarguments?

时间:2017-07-10 15:55:46

标签: coldfusion arguments coldfusion-9 cfloop

我有一个包含100多个字段的简单表单。所有这些字段都提交给cffunction,其中我有运行插入或更新查询的SQL代码。以下是我的代码示例:

    var formData = $('#'+frmID).serialize();
    $.ajax({
        type: 'POST',
        url: 'Components/MyFunction.cfc?method=userRecord',
        data: formData,
        dataType: 'json'
    }).done(function(obj){
        if(obj.STATUS === 200){
            return true;
        }else{
            return false;
        }
    }).fail(function(jqXHR, textStatus, errorThrown){
        alert(errorThrown);
    });

这是cffunction:

<cffunction name="userRecord" access="remote" output="true" returnformat="JSON">
    <cfargument name="userID" type="string" required="true">
    <cfargument name="userFName" type="string" required="true">
    <cfargument name="userLName" type="string" required="true">
    <cfargument name="userDOB" type="string" required="true">
    <cfargument name="userGender" type="string" required="true">
    <cfargument name="userAddress" type="string" required="true">
    <cfargument name="userCity" type="string" required="true">
    .... And there is more field in this form


    <cfset fnResults = StructNew()>
    //Here is SQL query for insert and update
    <cfreturn fnResults>
</cffunction>

有没有一种方法可以使用cfloop并动态收集所有参数,而不是手动创建所有参数?我找不到任何文章或例子。这是一个很好的选择还是手动创建参数是更好的方法?如果有人可以提供帮助,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:2)

尝试将数据作为结构传递。

<cffunction name="userRecord" access="remote" output="true" returnformat="JSON">
    <cfargument name="formData" type="structure" required="true">

    <cfloop collection="#arguments.formData#" item="key">
        #key#: #arguments.formData[key]#
    </cfloop>

    <cfset fnResults = StructNew()>
    //Here is SQL query for insert and update
    <cfreturn fnResults>
</cffunction>

答案 1 :(得分:1)

将整个表单数据作为结构传递。

var formData = $('#'+frmID).serializeArray();
$.ajax({
    type: 'POST',
    url: 'Components/MyFunction.cfc?method=userRecord',
    data: formData,
    dataType: 'json'
}).done(function(obj){
    if(obj.STATUS === 200){
        return true;
    }else{
        return false;
    }
}).fail(function(jqXHR, textStatus, errorThrown){
    alert(errorThrown);
});

<cffunction name="userRecord" access="remote" output="true" returnformat="JSON">
  <cfargument name="form" type="struct" required="true">
  <cfdump var="#arguments.form#">

</cffunction>