我有一个表单,用户必须从列表中选择值。列表由管理员创建。在其中一个列表中,有一个选项供用户选择代表某些保留代码的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:<p>{</p><p>The CFML compiler was processing:<ul><li>A cfset tag beginning on line 1071, column 18.<li>A cfset tag beginning on line 1071, column 18.
<pre>1069 : }>
1070 :
<b>1071 : <cfset convertYesNo = {</b>
1072 : "Yes" : "Yes ",
1073 : "No" : "No "
</pre>
我试图在YES和NO附近加上引号,但这没有帮助。如果有人知道如何解决这个问题,请告诉我。提前致谢!
答案 0 :(得分:6)
我认为CF9的结构符号不支持这种语法。请尝试以下操作(=
而不是:
分隔键值对。
<cfset convertYesNo = {
YES = "YES ",
NO = "NO "
}>
答案 1 :(得分:0)
<cfset qryRecs['value'] = URLEncodedFormat(structKeyExists(convertYesNo, myInfo[CurrentRow]) ? convertYesNo[myInfo[CurrentRow]] : myInfo[CurrentRow])>
Structs(HashTables)非常适合快速查找键,但是这里只有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);