ColdFusion - 如何在jQuery中访问CFC返回变量?

时间:2011-08-14 18:19:56

标签: javascript coldfusion cfc

我正在使用ColdFusion 9和jQuery。我正在使用CFAJAXPROXY。

我无法访问返回给jQuery对象的数据。

这是我的jQuery代码的一部分:

var jro = new jsApp();
NewUser = jro.addUser(NewEmail);

CFC中的方法是addUser。我传入一个电子邮件地址(NewEmail),我得到了新用户的UserID。

CFC中的此查询工作正常:

<cfquery name="GetUserID">
SELECT      MAX(UserID) as MaxID
FROM        Users
</cfquery>

当我对这样的值进行硬编码时,我没有问题:

<cfset NewUser = 10>
<cfreturn NewUser>

当我尝试使用这样的动态变量时,我收到一个JSON错误:

<cfset NewUser = GetUserID.MaxID>
<cfreturn NewUser>

此错误似乎发生在CFC中。对返回变量进行硬编码有效,但从查询返回单个整数不起作用。

如何从查询中返回单个整数?为什么这会造成问题?

以下是CFC的调用方式。

$("#AddUserSave").click(function() {
  NewEmail = $("#NewEmail").attr("value");
  var jro = new jsApp();
  UserID = jro.addUser(NewEmail);
  $("#UserDiv").load("GlobalAdmin/EditUser.cfm?UserID="+UserID);
});

同样,CFC拒绝从数据库返回UserID,但很乐意返回一个硬编码的数字。

好的,在我的CFC中,这有效:

<cfset NewUser = GetUserID.UserID>
<cfset NewUser = 1>
<cfreturn NewUser>

但这不起作用:

<cfset NewUser = GetUserID.UserID>
<cfreturn NewUser>

Firebug说:

parseJSON throw new SyntaxError("parseJSON"); 
cfajax.js (line 803)

好的,当我通过浏览器访问此方法时,它会显示一个返回的整数。

 <!--- GET MAX USER --->
 <cffunction name="getMaxUser" access="remote" returnformat="plain" returntype="any">
    <cfquery name="GetUserID">
        SELECT  MAX(UserID) AS MaxID
        FROM    Users
    </cfquery>
    <cfreturn createObject( 'java', 'java.lang.Integer' ).init( javaCast( 'int', GetUserID.MaxID ) ) />
</cffunction>

当我查看页面源时,maxid是1(一个/一个整数)。

在JavaScript中调用CFC:

    var jro = new jsApp();
    jro.getMaxUser();

我可以在此屏幕截图中查看我得到的确切错误:

http://evikjames.com/IMAGEs/parsejson.png

这是我的CFC的图像。

http://evikjames.com/images/CFC.png

以下是JavaScript创建的用于访问该方法的网址的图片:

http://www.evikjames.com/images/error-2.png

+++++++++++++++++++++++++++++++++++++++++++++++ ++++++ ANSWER

JavaScript需要创建一个将返回格式设置为plain的请求。我猜它的默认返回类型是JSON。 CFC扼杀了它自己创建的JSON。

var jro = new jsApp();
jro.setReturnFormat('plain');
UserID = jro.getMaxUser();

向查理致敬。我永远感激不尽。

2 个答案:

答案 0 :(得分:2)

根据我们的聊天,您需要远程访问方法来返回整数,而不是浮点数。

信用额度http://www.threesources.com/archives/009007.html,您需要执行以下操作:

1)指定returnFormat =“plain”(我相信你已经完成了)

2)<cfreturn createObject( 'java', 'java.lang.Integer' ).init( javaCast( 'int', GetUserID.MaxID ) ) />

根据上面链接的网站,原因是“ColdFusion的数值类型在自动生成的RPC WSDL中映射为double”。

该网站列出了需要采取的5个步骤,但我只需执行上面列出的2个步骤即可成功返回整数。

答案 1 :(得分:1)

我不确定您为什么要将返回的数据作为JavaScript数组访问。我不知道你是怎么打电话的,但看起来你只是回复一个号码,JSON格式是怎么回事?

我已经做了一段时间了,但是如果你只是做一个$ .ajax()调用,那么我认为这个值只是在“data”变量中。你试过简单的警报(数据)吗?它是否包含数字?

通过调用NewUser.DATA [0] [0],你说你有一个变量调用NewUser,其JSON等价于[[number]]。

你是如何用JavaScript进行调用的?返回JSON实际上是什么样的(你应该能够在FireBug或其他浏览器调试工具中看到它)?