如何强制Coldfusion cfc通过JSON输出数字数据作为字符串?
我正在使用jQuery.post()调用Coldfusion组件(cfc)。 我需要返回的数字的整数或字符串表示forms,以便在URL中使用。
{"PAGE":"My Page Title","ID":19382} or {"PAGE":"My Page Title","ID":"19382"}
相反,我得到的是小数:
{"PAGE":"My Page Title","ID":19382.0}
需要更新以下HTML:
My Page Title
从概念上讲,我认为有多个答案:
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:
SELECT TOP 1 id, title FROM pages WHERE linkID =
在JS中使用parseInt()
。 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.id
也只是CF中的数字值,EQ为123.尽管您的URL看起来URL.id
,如果它发布到CF,它仍然会工作。
这是一个已知的SerializeJSON()错误/function。 请参阅此答案以了解可能的解决方法
顺便说一句,因为你宁愿使用解决方案2)“我可以强迫Coldfusion将数字作为字符串发送”,例如当使用插件时需要像dataTable这样的字符串并且不想触及客户端代码…
只是试图强制表示如下数字的数字或字符串不起作用:
Test["caseSensitiveName"] = "#numericString#";
但添加前导空格将强制JSON字符串类型:
Test["caseSensitiveName"] = " #numericString#";
黑客攻击破解,但可以派上用场。
2)我可以强制Coldfusion将数字作为字符串发送。
你在用id做数学吗? 可能不是。 就你的jquery而言,这是一个只包含数字而不是整数的字符串。 这样对待它。
从另一个角度来看,如果你也控制后端,你可以尝试使用javaCast(“int”,someIntegerThatColdFusionThinksIsAFloat)强制ColdFusion将数字序列化为整数。