Поймать «последнюю запись» в ошибке Coldfusion для IE JavaScript - PullRequest
4 голосов
/ 31 марта 2010

Я использую ColdFusion, чтобы вытащить почтовые индексы Великобритании в массив для отображения на карте Google. Это происходит динамически из базы данных SQL, поэтому числа могут варьироваться от 1 до 100 +

скрипт отлично работает, однако в IE (стон) он решает отобразить одну точку в автономном режиме, где-то в Калифорнии.

Я исправил эту проблему в предыдущем веб-приложении, это было связано с запятой между каждым элементом массива, все еще присутствующим в конце. Прекрасно работает в Firefox, Safari и т. Д., Но не в IE.

Но он использовал набор из 10 записей, так что это было легко исправить.

Мне просто нужно небольшое утверждение if, чтобы обернуть мою запятую, чтобы скрыть ее, когда она попадает в последнюю запись. Я не могу понять это правильно. Любые советы / предложения?

вот строка кода, о которой идет речь:

var address = [<cfloop query="getApplicant"><cfif getApplicant.dbHomePostCode GT ""><cfoutput>'#getApplicant.dbHomePostCode#',</cfoutput></cfif> </cfloop>];

Надеюсь, кто-то может помочь с этим довольно простым запросом. У меня просто плохой день в офисе!

Ответы [ 5 ]

5 голосов
/ 31 марта 2010
var address = [#ListQualify(ValueList(getApplicant.dbHomePostCode), "'")#]

Я заметил <cfif getApplicant.dbHomePostCode GT ""> в вашем коде.

При ListQualify() пустые (NULL или пустая строка) почтовые индексы не будут отображаться в выводе, поскольку функции списка ColdFusion игнорируют пустые элементы списка.


РЕДАКТИРОВАТЬ: предыдущая редакция этого ответа указала, что пустые элементы будут отображаться в результате ListQualify(). Это неверно, но первые два комментария относятся к этой первоначальной редакции.

1 голос
/ 31 марта 2010

Мой подход немного другой, вам не нужно настраивать и не выполнять итерации; все это делается тегом 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 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>];
0 голосов
/ 31 марта 2010

Используя 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>
0 голосов
/ 31 марта 2010

@ Томалок имеет хороший ответ. Это, наверное, то, что я бы использовал.

Прежде чем увидеть его ответ, вот что мой ответ, вероятно, был бы:

<cfset codelist = "">
<cfloop query="getApplicant">
    <cfif len(dbHomePostCode)>
        <cfset codelist = listappend("'#codelist#'", dbHomePostCode)>
    </cfif>
</cfloop>
<cfset address = "[#codelist#]">
0 голосов
/ 31 марта 2010

Попробуйте это

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>];

Приведенный выше код использует целое число (i) для сохранения позиции в цикле, и когда дело доходит до вывода запятой, проверяется, меньше ли я размера результата SQL. Таким образом, он будет выводить запятую только в том случае, если это не последняя строка набора результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...