2

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

从 ColdFusion 11 开始,数据类型在 Query 和 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 调用调用此函数,此函数返回一个包含结构的数组。当我在序列化结果后转储返回值时,我可以在控制台中看到一个 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>
4

1 回答 1

0

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

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

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

于 2015-03-23T21:17:33.873 回答