我正在使用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();
向查理致敬。我永远感激不尽。
答案 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或其他浏览器调试工具中看到它)?