AJAX从cfc返回变量

时间:2015-07-24 17:49:21

标签: javascript jquery ajax coldfusion

我试图通过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获得计数...任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:6)

无论你怎么称呼它,你的功能都会失败。你说你想要返回一个数字但是,正如在注释中指出的那样,你将返回一个未定义的变量。这将解决这个问题:

  • 在您的cffunction标记中,将返回类型从查询更改为数字。
  • 在查询的select子句中,使用sql别名给自己 列名。
  • 由于您的查询只有一个字段和一行,因此返回该字段 值。

所以这个:

<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={someTe‌​stValueHere}&returnformat={desiredFormatHere}

顺便说一下,虽然它不会导致错误,但请确保本地化所有函数局部变量:包含查询名称。假设您正在运行CF9 +,请使用本地范围:<cfquery name="Local.getSpeaker"...>