捕捉';最后一条记录';针对IE javascript错误的Coldfusion

捕捉';最后一条记录';针对IE javascript错误的Coldfusion,javascript,arrays,google-maps,coldfusion,Javascript,Arrays,Google Maps,Coldfusion,我正在使用ColdFusion将英国邮政编码拉入一个数组,以便在谷歌地图上显示。这是在SQL数据库中动态发生的,因此数字的范围可以是1到100+ 该脚本工作得很好,然而,在IE(呻吟)中,它决定在加利福尼亚某处离线显示一个点 我在以前的一个webapp中修复了这个问题,这是因为每个数组项之间的逗号在最后仍然存在。在Firefox、Safari等浏览器中运行良好,但在IE中不起作用 但是,这一次使用的是一组10条记录,因此很容易修复 我只需要一个小小的if语句来环绕我的逗号,以便在它到达最后一条记

我正在使用ColdFusion将英国邮政编码拉入一个数组,以便在谷歌地图上显示。这是在SQL数据库中动态发生的,因此数字的范围可以是1到100+

该脚本工作得很好,然而,在IE(呻吟)中,它决定在加利福尼亚某处离线显示一个点

我在以前的一个webapp中修复了这个问题,这是因为每个数组项之间的逗号在最后仍然存在。在Firefox、Safari等浏览器中运行良好,但在IE中不起作用

但是,这一次使用的是一组10条记录,因此很容易修复

我只需要一个小小的if语句来环绕我的逗号,以便在它到达最后一条记录时隐藏它。我似乎做得不对。有什么建议吗

下面是有问题的代码行:

var address = [<cfloop query="getApplicant"><cfif getApplicant.dbHomePostCode GT ""><cfoutput>'#getApplicant.dbHomePostCode#',</cfoutput></cfif> </cfloop>];
var address=['#getapplicator.dbHomePostCode',];
希望有人能帮助这个相当简单的请求。我只是在办公室度过了糟糕的一天

试试这个

var address = [<cfset i=0><cfloop query="getApplicant"><cfset i=i+1><cfif getApplicant.dbHomePostCode GT ""><cfoutput>'#getApplicant.dbHomePostCode#'<cfif i LT getApplicant.RecordCount>,</cfif></cfoutput></cfif></cfloop>];
var address=['#getapplicator.dbHomePostCode',];
上面的代码使用一个整数(i)来存储循环中的位置,并在输出时检查逗号以查看i是否小于SQL结果的大小。这样,如果逗号不是结果集的最后一行,它将只输出一个逗号

var address = [#ListQualify(ValueList(getApplicant.dbHomePostCode), "'")#]
我注意到您的代码中有一个

使用
listQualified()
时,空(NULL或空字符串)post代码将不会显示在输出中,因为ColdFusion列表函数忽略空列表元素



编辑:此答案的上一次修订表明,
ListQualify()
的结果中将显示空元素。这是不正确的,但前两条评论指的是这个初始版本。

@Tomalok有一个很好的答案。那可能就是我要用的

在看到他的答案之前,我的答案可能是:

<cfset codelist = "">
<cfloop query="getApplicant">
    <cfif len(dbHomePostCode)>
        <cfset codelist = listappend("'#codelist#'", dbHomePostCode)>
    </cfif>
</cfloop>
<cfset address = "[#codelist#]">

我的方法有点不同,你需要更少的设置,也不需要迭代;所有这些都是通过cfloop标记完成的

var address = [
<cfloop from="1" to="#getApplicant.recordcount#" index="i">
<cfif getApplicant.dbHomePostCode GT "">
  <cfoutput>
    '#getApplicant.dbHomePostCode[i]#'
    <cfif i lt getApplicant.recordcount>,</cfif>
  </cfoutput>
</cfif>
</cfloop>
];
var地址=[
“#getapplicator.dbHomePostCode[i]#”
,
];
在这里没有中断,你应该能够粘贴到你的页面,它会工作

var address = [<cfloop from="1" to="#getApplicant.recordcount#" index="i"><cfif getApplicant.dbHomePostCode GT ""><cfoutput>'#getApplicant.dbHomePostCode[i]#'<cfif i lt getApplicant.recordcount>,</cfif></cfoutput></cfif></cfloop>];
var address=['#getapplicator.dbHomePostCode[i]#',];

使用query.recordcount,您可以确定是否在查询的最后一行,并相应地调整输出。总的来说,托马拉克和本·杜姆的答案都很好,但这一条说明了你可以如何用你原来的思路来解决这个问题

<cfset var address = "[">
<cfloop query="getApplicant">
    <!--- If not the last row, include the comma --->
    <cfif getApplicant.dbHomePostCode NEQ "" AND getApplicant.currentrow NEQ getApplicant.recordcount>
        <cfset address = address & getApplicant.dbHomePostCode & ",">

    <!--- If last row, omit the comma --->
    <cfelseif getApplicant.dbHomePostCode NEQ "">
        <cfset address = address & getApplicant.dbHomePostCode>
    </cfif>
</cfloop>
<cfset address = address & "];">

<!--- Now we output the string all at once --->
<cfoutput>#address#</cfoutput>

#地址#

+1-不确定CF是否正确,但这就是我处理循环中分隔符的方法。最好使用Marcos版本,它使用currentrow和recordcount,而不是为“I”计数添加额外的代码。@tomalak,listAppend对空值也有同样的问题吗?不,没有
ListAppend()
不会创建空值或尾随逗号。事实上,即使是
listQualified()
也不会查看空值<代码>列表限定(“1,2,3,”,“”)将返回
“'1','2','3'”
。但是,
ListQualified(“1,2,3,”,“”)
将返回
“'1',”,“'2',”,“,”,“
,因为空格不是空值。@Antony:我已经编辑了这方面的答案。现在更简单了。@Simon:事实上,Internet Explorer是其中唯一一个正确的。数组声明中的尾随空格是JavaScript语法冲突,语法错误导致阻塞不是“bug”。毕竟,JavaScript不是HTML。其他浏览器的宽容让JS调试变得困难。是的,我在发布我的反IE仇恨运动后意识到了这一点。我认为在这个场合,“bug”可能是个错误的词