【问题标题】:Submit form using ajax. Pass url variables to coldfusion function in cfc使用 ajax 提交表单。将url变量传递给cfc中的coldfusion函数
【发布时间】:2017-08-04 18:29:24
【问题描述】:

我正在为仪表板页面制作一个过滤器,其中包含从 ajax 调用提供给我的数据库的一堆图表,并从中制作一个 json 结构。我对过滤器有点迷茫,因为基本上每个字段都是可选的。现在我正在使用 jquery 和 formvalidator.io 提交 from。它将 from 值发送到最初绘制我的图表的函数。我迷路的地方是在我的coldfusion处理程序中,它将数据传递给coldfusion函数。如何传递动态数量的参数?

代码:

使用 jquery 提交表单:

$('#overviewFilter').formValidation({
            framework: 'bootstrap4'
        }).on("success.form.fv", function(e) {
            // Prevent form submission
            e.preventDefault();
            projectOverview();
        });

projectOverview 函数的Json 部分。我在那里有 serializeArray() 位,但我只是在试验,这可能有点离谱。

function projectOverview() {
    var formString = $('#overview_filter').serializeArray();
    $.getJSON('/a_assets/ajax/a_cms.cfm',{cms_action:'task_complete_history',form_data:formString}, function (data) {
    //charts 
    });

Coldfusion Handeler 代码。我在函数中有#url# 参数,因为我正在试验。

<cfif structKeyExists(url,"cms_action") and url.cms_action eq 'task_complete_history'>
    <cfobject name="cms" component="a_assets.cfc.cms">
    <cfset TaskHistoryNewComplete = cms.fnTaskHistoryNewComplete(#url#)>
    <cfoutput>#TaskHistoryNewComplete#</cfoutput>
</cfif>

Coldfusion CFC。我现在只有一个 formData 参数。对函数的每次调用都是一个查询,需要我要查找的值来过滤图表。

<cffunction name="fnTaskHistoryNewComplete" returntype="any" output="false">
        <cfargument name="formData" required="false">
        <cfset mydata = []>
        <cfset mydatatemp = structNew()>
        <cfset progressObj = []>
        <cfset TaskIntake = fnTaskIntake()>
        <cfloop query="TaskIntake">
            <cfset mydatatemp2 = structNew()>
            <cfset mydatatemp2['Month'] = Month>
            <cfset mydatatemp2['Completed'] = Completed>
            <cfset mydatatemp2['Opened'] = Opened>
            <cfset mydatatemp2['Late'] = Late>
            <cfset arrayAppend(progressObj, mydatatemp2)>
        </cfloop>
        <cfset mydatatemp['progress'] = progressObj>
        <cfset userObj = []>
        <cfset TaskUserIntake = fnTaskUserIntake()>
        <cfloop query="TaskUserIntake">
            <cfset mydatatemp2 = structNew()>
            <cfset mydatatemp2['UserId'] = UserRcId>
            <cfset mydatatemp2['Fname'] = Fname>
            <cfset mydatatemp2['Lname'] = Lname>
            <cfset mydatatemp2['Assigned'] = TaskCount>
            <cfset arrayAppend(userObj,mydatatemp2)>
        </cfloop>
        <cfset mydatatemp['users'] = userObj>
        <cfset typeObj = []>
        <cfset TaskTypeIntake = fnTaskTypeIntake()>
        <cfloop query="TaskTypeIntake">
            <cfset mydatatemp2 = structNew()>
            <cfset mydatatemp2['TypeId'] = NFTypeRcId>
            <cfset mydatatemp2['Name'] = NFTDescription>
            <cfset mydatatemp2['TypeCount'] = TaskCount>
            <cfset arrayAppend(typeObj,mydatatemp2)>
        </cfloop>
        <cfset mydatatemp['types'] = typeObj>
        <cfset tagObj = []>
        <cfset TaskTagIntake = fnTaskTagIntake()>
        <cfloop query="TaskTagIntake">
            <cfset mydatatemp2 = structNew()>
            <cfset mydatatemp2['TagId'] = TagRcId>
            <cfset mydatatemp2['Name'] = Name>
            <cfset mydatatemp2['TagCount'] = TaskCount>
            <cfset arrayAppend(tagObj,mydatatemp2)>
        </cfloop>
        <cfset mydatatemp['tags'] = tagObj>
        <cfset gameObj = []>
        <cfset TaskGameIntake = fnTaskGameIntake()>
        <cfloop query="TaskGameIntake">
            <cfset mydatatemp2 = structNew()>
            <cfset mydatatemp2['GameId'] = GameRcId>
            <cfset mydatatemp2['Name'] = GameName>
            <cfset mydatatemp2['GameCount'] = TaskCount>
            <cfset arrayAppend(gameObj,mydatatemp2)>
        </cfloop>
        <cfset mydatatemp['games'] = gameObj>
        <cfset platformObj = []>
        <cfset TaskPlatformIntake = fnTaskPlatformIntake()>
        <cfloop query="TaskPlatformIntake">
            <cfset mydatatemp2 = structNew()>
            <cfset mydatatemp2['PlatformId'] = PlatformRcId>
            <cfset mydatatemp2['Name'] = Name>
            <cfset mydatatemp2['PlatformCount'] = TaskCount>
            <cfset arrayAppend(platformObj,mydatatemp2)>
        </cfloop>
        <cfset mydatatemp['platforms'] = platformObj>
        <cfset genreObj = []>
        <cfset TaskGenreIntake = fnTaskGenreIntake()>
        <cfloop query="TaskGenreIntake">
            <cfset mydatatemp2 = structNew()>
            <cfset mydatatemp2['GenreId'] = GenreRcId>
            <cfset mydatatemp2['Name'] = Name>
            <cfset mydatatemp2['GenreCount'] = TaskCount>
            <cfset arrayAppend(genreObj,mydatatemp2)>
        </cfloop>
        <cfset mydatatemp['genres'] = genreObj>
        <cfset arrayAppend(mydata,mydatatemp)>
        <cfset data = structNew()>
        <cfset data['data'] = mydata>
        <cfset TaskHistoryNewComplete = serializeJson(mydata)>
        <cfreturn TaskHistoryNewComplete>
    </cffunction>

我确信我以前做过,但我一生都记不起我是怎么做到的。

【问题讨论】:

    标签: javascript jquery json ajax coldfusion


    【解决方案1】:

    单独关注每个问题。你说,The place I am getting lost at is in my coldfusion handeler that passes the data to a coldfusion function.这就是手头的问题。当你隔离它时,你会意识到你必须做这种事情。

    <cfargument name = "optionalArgument" default = "defaultValue">
    <cfif arguments.optionalArgument is "defaultValue">
    code for that argument not provided
    <cfelse>
    code for argument is provided
    </cfif>
    

    【讨论】:

    • 我知道我可以用一堆 CFIF 来做到这一点。如果可能的话,我要避免这种情况。但它就是这样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 2013-10-17
    相关资源
    最近更新 更多