【问题标题】:Prevent YES/NO values to convert to true/false Coldfusion 9?防止 YES/NO 值转换为 true/false Coldfusion 9?
【发布时间】:2018-04-08 00:27:40
【问题描述】:

我有一个表单,用户必须从列表中选择值。列表由管理员创建。在其中一个列表中,用户可以选择NO 值,该值代表一些保留代码。类似于Not Occupied。所以我使用 JQuery 和 AJAX 与服务器进行通信。在后端,我在生产服务器上使用 ColdFusion 9。因此,为了带回NO,我必须将其转换为带有空格的'NO '。如果我不这样做,这个函数将在客户端返回 false 值。这是我的代码转换示例:

<cfset convertYesNo = {
    YES : "YES ",
    NO : "NO "
}>

<cfset qryRecs['value'] = URLEncodedFormat(structKeyExists(convertYesNo, myInfo[CurrentRow]) ? convertYesNo[myInfo[CurrentRow]] : myInfo[CurrentRow])>

上面的代码在我的开发网站上运行良好。唯一的区别是,在开发中我们有 ColdFusion 10,而在实时我们有 ColdFusion 9。所以一旦我将代码移动到实时,我就开始收到错误消息:

ColdFusion was looking at the following text&#x3a;<p>&#x7b;</p><p>The CFML compiler was processing&#x3a;<ul><li>A cfset tag beginning on line 1071, column 18.<li>A cfset tag beginning on line 1071, column 18.

<pre>1069 :         }&gt;
1070 :      
<b>1071 :       &lt;cfset convertYesNo = {</b>
1072 :          &quot;Yes&quot; : &quot;Yes &quot;,
1073 :          &quot;No&quot; : &quot;No &quot;
</pre>

我试图在 YES 和 NO 周围加上引号,但这没有帮助。如果有人知道如何解决这个问题,请告诉我。提前致谢!

【问题讨论】:

  • 你可以使用 JavaCast("string", "No") 还是会自动重新转换回不受欢迎的东西?转换为 JSON 时,我使用 JSONUtil 库并使用 JavaCast("boolean", 1) 在 JSON 中创建非引号括起来的 TRUE/FALSE 值。

标签: coldfusion coldfusion-9 cfml railo lucee


【解决方案1】:

我认为 CF9 的结构符号不支持这种语法。尝试以下方法(= 而不是 : 分隔键值对)。

<cfset convertYesNo = {
    YES = "YES ",
    NO = "NO "
}>

【讨论】:

  • 这是我遇到的第二个错误。你知道为什么这会在 CF9 中显示:SyntaxError: JSON.parse: expected ',' or '}' after property value in object at the line 1 column 13714
  • @espresso_coffee 我不确定上下文。不看代码我不能肯定地说什么/
【解决方案2】:

&lt;cfset qryRecs['value'] = URLEncodedFormat(structKeyExists(convertYesNo, myInfo[CurrentRow]) ? convertYesNo[myInfo[CurrentRow]] : myInfo[CurrentRow])&gt;

结构(哈希表)非常适合快速查找键,但您在这里只有 2 个键,因此更有效的构造将是(cfscript 语法中的示例):

qryRecs['value'] = URLEncodedFormat(
    listFindNoCase("YES,NO", myInfo[CurrentRow]) ?
        uCase(myInfo[CurrentRow]) & " "
            :
        myInfo[CurrentRow]
);

虽然为了更好的可读性和代码维护,您应该考虑将其分解为多个语句:

value = myInfo[CurrentRow];
if (value == "YES" || value == "NO")          // use EQ operator in CFML syntax
    value = uCase(value) & " ";

qryRecs['value'] = URLEncodedFormat(value);

【讨论】:

    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 2013-09-09
    • 2018-07-21
    • 2011-08-23
    • 2011-04-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多