我正在尝试创建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>
答案 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>