如何强制Coldfusion cfc通过JSON输出数字数据作为字符串?

Dan*_*sen 4 javascript ajax coldfusion jquery cfc

我正在使用jQuery.post()调用Coldfusion组件(cfc).我需要返回的数字的整数或字符串表示形式,以便在URL中使用.

{"PAGE":"My Page Title","ID":19382}
or
{"PAGE":"My Page Title","ID":"19382"}
Run Code Online (Sandbox Code Playgroud)

相反,我得到的是小数:

{"PAGE":"My Page Title","ID":19382.0}
Run Code Online (Sandbox Code Playgroud)

需要更新以下HTML:

<a href="page.cfm?id=19382" id="pagelink">My Page Title</a>
Run Code Online (Sandbox Code Playgroud)

从概念上讲,我认为有多个答案:

1)我可以使用jQuery来获取小数点左边的数字.

2)我可以强制Coldfusion将数字作为字符串发送.

3)我可以生成整个链接服务器端,只需替换整个链接标记HTML(不是首选答案,但也许它是最好的)

有谁知道怎么做1或2?3更好吗?

相关的Javascript :(未优化)

$(".link").live('click', function () {
    var $linkID, serviceUrl;
    serviceUrl = "mycfc.cfc?method=getPage";
    $linkID = $(this).attr("rel");

    $.post(serviceUrl, { linkid: $linkID }, function (result) { 
        $('#pagelink').val(result.TITLE);
        if (result.FMKEY.length) {
             // NEED the ID number WITHOUT the .0 at the end
             $('#pagelink').attr("href") = "page.cfm?id=" + result.ID;
             $('#pagelink').text(result.TITLE);
        }
    }, "json");
});
Run Code Online (Sandbox Code Playgroud)

我的CFC:

<component output="no">
<cfsetting showdebugoutput="no">
<cffunction name="getPage" access="remote" returnFormat="JSON" output="no" hint="Looks up a Page Title and ID">
    <cfargument name="linkID" type="string" required="yes">
    <cfset var page = queryNew("id,title")>
    <cfset var result = structNew()>
    <cfquery datasource="myDatasource" name="page">
        SELECT TOP 1 id, title
        FROM pages
        WHERE linkID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.linkID#">     
    </cfquery>
    <cfif page.recordcount>
        <cfset result.id = page.id>
        <cfset result.title = page.title>
    </cfif>
    <cfreturn result>
</cffunction>
</component>
Run Code Online (Sandbox Code Playgroud)

Ser*_*gii 8

这是一个已知的SerializeJSON()错误/功能.请参阅此答案以了解可能的解决方法


Hen*_*nry 4

在JS中使用parseInt()。有点喜欢你的解决方案1,但这比你想象的要容易。

$('#pagelink').attr("href") = "page.cfm?id=" + parseInt(result.ID, 10);
Run Code Online (Sandbox Code Playgroud)

默认情况下,CF 将任何整数(如 123)序列化为“123.0”,但通常在无类型语言(如 JS 或 CF)中这并不重要。

(远程函数使用的内容)的默认行为SerializeJSON()无法被覆盖,但如果您愿意,您可以使用 www.riaforge.org 中的第 3 方 JSON 库之一

ps 即使你浏览到“something.cfm?id=123.0”,URL.id它只是 CF 中的一个数值,EQ 为 123。虽然你的 URL 看起来有点奇怪,但如果它发布到 CF,它仍然可以工作。