一尘不染

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

ajax

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

{"PAGE":"My Page Title","ID":19382}
or
{"PAGE":"My Page Title","ID":"19382"}

相反,我得到的是一个小数:

{"PAGE":"My Page Title","ID":19382.0}

需要更新以下HTML:

<a href="page.cfm?id=19382" id="pagelink">My Page Title</a>

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

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");
});

我的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>

阅读 315

收藏
2020-07-26

共1个答案

一尘不染

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

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

CF默认将123之类的整数序列化为“ 123.0”,但通常对于无类型语言(如JS或CF)都没有关系。

SerializeJSON()(远程功能使用的默认行为)不能被覆盖,但是如果您愿意,可以使用www.riaforge.org的第三方JSON库之一

ps即使浏览到“ something.cfm?id =
123.0”,URL.idCF中的数字也只是EQ到123的一个数值。尽管您的URL看起来有点怪异,但如果将其发布到CF,它仍然可以使用。

2020-07-26