如何使用Ajax创建.cfc文件?

时间:2013-03-26 20:20:51

标签: ajax jquery coldfusion coldfusion-7

我正在尝试创建ColdFusion组件(.cfc)文件并使用Ajax传递我的查询。我这样做是否正确,我可以在ColdFusion 7中使用Ajax吗?

从OP的编辑评论中添加

  

我再次对此进行了更新,就像我上面说的那样,我的按钮点击工作,我的组件工作但是,对组件的调用什么都不做。有人可以再看看它,看看问题可能是什么。我觉得我很近。另外,如何检索返回的值?

从OP的编辑评论中添加

  

我更新了代码但是,我仍然没有得到任何东西。有人可以请你帮我理解我错过的东西吗?

以下是form.cfm:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script language="javascript" type="text/javascript">
    function validateFunding(){
        $('#Finalize').click(function(){  
        $.ajax({
             type:"get",
                url: "awardTotals.cfc?method=searchAward",
                data: {total: $("totals").val(), codeNum: $("CodeNum").val(), testYear: $("TestYear").val, selType: $("selType").val, selJuris: $("selJuris").val},
            success: function(data) {
            if (isTotals == true) { alert('There is a match');} else { alert('This does not match);}
            }
        });
          });
    }

这是我的awardTotal.cfc。

    <cfcomponent>
        <cffunction name="searchAward" access="remote" returntype="any">
            <cfargument name="Total" type="numeric" required="true">
            <cfargument name="CodeNum" type="string" required="true">
                    <cfargument name="TestYear" type="numeric" required="true">
                    <cfargument name="SelType" type="numeric" required="true">
                    <cfargument name="SelJuris" type="numeric" required="true">
                <cfset var searchAwards = "">
            <cfquery name="searchAwards" datasource="Test">
             SELECT g.Code1 + g.Code2 + g.Code3 + g.Code4 AS GrandTotal
                     FROM Codes g 
                    WHERE g.CodeNumber = <cfqueryparam cfsqltype="cf_sql_varchar"  value="#arguments.CodeNum#">
                     AND g.TestYear = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.TestYear#">
                     AND g.SelType = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.SelType#">  
                       AND g.Jurisdiction = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.SelJuris#">   
             </cfquery> 
           <cfscript>
          if(arguments.Totals = searchAwards.GrandTotal){
             return true;
          } else {
             return false;
          }
        </cfscript>
        </cffunction>
    </cfcomponent>

2 个答案:

答案 0 :(得分:2)

您正在传递grandTotal并且您的方法正在寻找awardTotals。你返回一个空字符串,并寻找一个布尔值。试试这个:

function ValidateFunding(awardTotals){
    $.ajax({
        url: 'awardTotals.cfc',
        data: {method: 'searchAward',  awardTotals: numberToPass},
        success: function(data) {
        if (isTotals == true) { alert('There is a match');} else { alert('This does not match);}
        }
    });
}

然后

<cfcomponent>
    <cffunction name="myFunction" access="public" returntype="Query">
        <cfargument name="awardTotals" type="string" required="true">

        <cfset var searchAward = queryNew()>
        <cfquery name="searchAward" datasource="Test">
                SELECT g.Code1 + g.Code2 + g.Code3 + g.Code4 AS GrandTotal
                FROM Codes g 
                WHERE g.CodeNumber = <cfqueryparam cfsqltype="cf_sql_varchar"  value="#form.CodeNum#">
                  AND g.TestYear = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.TestYear#">
                  AND g.SelType = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.SelType#">   
                  AND g.Jurisdiction = <cfqueryparam cfsqltype="cf_sql_varchar" value="#form.SelJuris#">    
         </cfquery> 
       <cfscript>
          if(arguments.awardTotals eq searchAward.grandTotal){
             return true;
          } else {
             return false;
          }
    </cffunction>
</cfcomponent>

@billy Cravens是对的。你不能使用cfajaxproxy,但jquery ajax会起作用。

答案 1 :(得分:1)

cfajaxproxy是在ColdFusion 8中引入的,因此它在CF7上不可用。

但是,您可以通过将方法和参数附加到URL来调用jQuery ajax()调用中的CFC:awardTotal.cfc?method=myFunction&awardTotals=#awardTotals#

你当然必须使用access="remote"并返回JavaScript可以处理的输出(同样在CF7上你的选项有点受限,因为像serializeJson()这样的函数也被添加到CF8中)< / p>

(见Invoke ColdFusion function using AJAX