ColdFusion 11序列化期间的数据类型保留

时间:2015-03-13 16:47:31

标签: coldfusion coldfusion-9 coldfusion-11

我最近将我的代码从CF9移到了CF11,当我尝试使用serializeJSON时,我遇到了问题。根据CF文档:

  

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

     

SerializeJSON考虑数据库中定义的数据类型   序列化。如果数据库将列定义为字符串,则为any   插入到列中的数字仍将被视为字符串   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调用调用此函数,此函数返回一个带有结构的数组。在我序列化结果后转储返回值时,我可以在控制台中看到一个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>

1 个答案:

答案 0 :(得分:0)

我不得不用于此错误的不幸解决方法是将空格连接到值的末尾

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

然后js必须知道这一点(我知道,这很糟糕)并删除该尾随空格。