我试图通过cfc文件使用AJAX在我的数据库上执行SQL COUNT,但是,我不知道如何获取返回变量。 cfc文件如下
<cffunction name="getSpeakerCount" access="remote" returntype="query">
<cfargument name="AID" required="true" type="string">
<cfquery name="getSpeaker" datasource="SpeakerCard">
SELECT COUNT(AID)
FROM tbl_SpeakerCard_Log
WHERE AID = '#AID#'
</cfquery>
<cfreturn getSpeakerCount>
</cffunction>
我的ajax就是这样......我不确定如何正确地调用/使用它。
for (var i = 0; i < X; i++)
{
$.ajax('actions/AgendaList.cfc?wsdl', {method : 'getSpeakerCount', AID: AgID, dataType:
"text", type: 'get', success: function(data)
{
SCount[i] = data;
}
}});
这总是将SCount [i]中的所有元素都返回为undefined。我不确定如何从cfc获得计数...任何帮助表示赞赏!
答案 0 :(得分:6)
无论你怎么称呼它,你的功能都会失败。你说你想要返回一个数字但是,正如在注释中指出的那样,你将返回一个未定义的变量。这将解决这个问题:
所以这个:
<cffunction name="getSpeakerCount" access="remote" returntype="query">
成为这个:
<cffunction name="getSpeakerCount" access="remote" returntype="numeric">
和此:
SELECT COUNT(AID)
成为这个:
SELECT COUNT(AID) records
和此:
<cfreturn getSpeakerCount>
成为这个:
<cfreturn getSpeaker.records>
关于使用查询参数的注释也是有效的。此外,您应该调整该变量的范围。
所以这个:
WHERE AID = '#AID#
应该是这样的:
WHERE AID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.aid#">
确保在使用ajax尝试使用ColdFusion代码之前可以运行它。
答案 1 :(得分:3)
(编辑:打字时间过长,Dan在大部分时间都打败了我;-)在此留下更多的评论。请参阅以下有关测试,返回类型和格式的其他要点。
正如your other thread中提到的,你似乎想要立刻解决太多问题。一次接近一件。在您考虑从javascript调用远程函数之前,请验证它是否在从浏览器调用时按预期工作。
该功能有几个问题。
您说要返回一个简单的“count”,但该函数返回整个查询对象。如果您想返回一个简单的数字,请返回count(AID)
值。
要在查询外部使用count(AID)
,您需要在SQL中使用列别名,即SELECT count(AID) AS YourAliasHere ....
。
该函数返回一个不存在的变量,即<cfreturn getSpeakerCount>
。要返回计数,请改用查询列:<cfreturn getSpeaker.yourAliasHere>
。一定要修改函数returnType
。它应该与函数返回的值匹配,在本例中为“numeric”。
默认情况下,函数使用returnformat=wddx
。如果您需要不同的格式,则需要在URL或函数签名中指定它。
最后,在浏览器中测试该函数以确保它返回预期值 - 一个简单的数字。请务必同时执行“查看来源”,因为<
和>
会导致wddx在屏幕上无法完全显示。
http://yourserver.com/path/to/AgendaList.cfc?method=getSpeakerCount&AID={someTestValueHere}&returnformat={desiredFormatHere}
顺便说一下,虽然它不会导致错误,但请确保本地化所有函数局部变量:包含查询名称。假设您正在运行CF9 +,请使用本地范围:<cfquery name="Local.getSpeaker"...>