2015-03-13 86 views
2

我最近将我的代码从CF9移动到CF11,并且当我尝试使用serializeJSON时遇到问题。根据CF文档:ColdFusion 11序列化期间的数据类型保存

从ColdFusion 11开始,在查询和CFC的代码执行时间期间保留数据类型。

SerializeJSON考虑数据库中为 序列化定义的数据类型。如果数据库将某列定义为字符串,则插入该列的任何 号码仍将被 SerializeJSON视为字符串。

但我想这是不是这样的....

当我拉出来的数据在CF9 varchar列的它出来像这样"docid":"123"这是我想要的,但在CF11相同数据看起来像这样"docid":123,并导致我正在尝试做什么的问题。

更具体地说,我的ID看起来像这个2001101009460111385185这比javascript可以接受的更长,并且它们被转换成科学记数法。用旧的格式我没有这个问题,因为我的ID被视为一个字符串,这是我想要的。

Note: my code is exactly the same on both versions of CF 

以前任何人都有过这个问题,你是怎么绕过它的?

代码示例
我通过AJAX调用调用该函数,该函数返回一个带有struct的数组。当我序列化结果后转储返回值时,我可以在控制台中看到JSON对象,但所有数字值都缺少引号。在测试文件我创建了一个简单的查询,然后我序列化的结果,一切都看起来很不错......

<cffunction name="locationData" returnformat="json" access="remote"> 
     <cfargument name="locationid" required="yes" type="string"> 
     <cfargument name="clientBrandid" required="yes" type="string"> 
      <cfscript> 
      locationData = new mod_sigweb.components.xamplifierCFCs.location_info(); 
      result = locationData.getLocation(locationid,clientBrandid); 
      </cfscript>   
     <cfdump var="#serializeJSON(result[1],'struct')#"> 
     <cfabort> 
     <cfreturn #result#> 
    </cffunction> 
+0

您正在使用哪种CF11更新?最近修复了一个与此类似的错误。在错误的情况下,它在序列化后将字符串“No”转换为false。 – haxtbh 2015-03-13 17:01:58

+0

ColdFusion 11 Update 4并没有其他更新当前可用。我创建了一个测试文件和序列化的工作,但是当我从我的函数发送回javascript是从任何数字值删除引号 – Geo 2015-03-13 17:05:37

+0

我刚刚测试了我在更新4中提到的错误,它似乎仍然破碎。 :/ – haxtbh 2015-03-13 17:06:37

回答

0

不幸的解决办法,我只好用这种错误是连接空间该值

<cfloop index="i" from="1" to="#ArrayLen(result)#"> 
    <cfset result[i].docid = result[i].docid & " "/> 
</cfloop> 

,然后JS年底已意识到这一点,(我知道,这是坏的),并删除尾随空格。