4

我正在使用 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>
4

5 回答 5

8

这是一个已知的 SerializeJSON() 错误/功能。有关可能的解决方法,请参阅此答案

于 2010-03-19T20:15:47.387 回答
4

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

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

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

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

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

于 2010-03-19T20:00:38.093 回答
1

顺便说一句,当您更愿意使用解决方案 2)“我可以强制 Coldfusion 将数字作为字符串发送”时,例如,当使用需要像 dataTable 这样的字符串并且不想接触客户端代码的插件时......

仅仅试图强制使用代表如下数字的数字或字符串是行不通的:

Test["caseSensitiveName"] = "#numericString#";

但添加前导空格强制 JSON 字符串类型:

Test["caseSensitiveName"] = " #numericString#";

Hack hack hack,但可以派上用场。

于 2012-12-11T12:44:03.310 回答
1

从另一个角度来看,如果您也控制后端,您可以尝试使用 javaCast("int", someIntegerThatColdFusionThinksIsAFloat) 强制 ColdFusion 将数字序列化为整数。

于 2014-10-16T13:10:31.187 回答
0

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

你在用 id 做数学吗?可能不是。就您的 jquery 而言,这是一个仅包含数字而不是整数的字符串。就这样对待它。

于 2010-03-19T18:46:51.847 回答