0

我正在尝试创建一个 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>
4

2 回答 2

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 会工作。

于 2013-03-26T21:18:07.640 回答
1

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

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

您当然必须使用access="remote"并返回 JavaScript 可以处理的输出(同样在 CF7 上,您的选项有点有限,因为类似的功能也serializeJson()已在 CF8 中添加)

(请参阅使用 AJAX 调用 ColdFusion 函数

于 2013-03-26T20:52:44.743 回答