Coldfusion: конфликтующие инструкции cfdump

#coldfusion #coldfusion-9

#coldfusion #coldfusion-9

Вопрос:

У меня есть запрос l.q. l ограничен ли var:

 var l = {};
  

Если я дамп l:

 writeDump(var:l, abort:true);
  

Я получаю дамп l

Вы можете видеть, что q (l.q) показывает [неопределенный элемент структуры]. Однако, если я сделаю:

 writeDump(var:isQuery(l.q), abort:true);
  

Я получаю yes в качестве выходных данных? Сброс l.q.RecordCount возвращает 1.

Если я дамп l.q, я получаю сообщение об ошибке: Тип ошибки java.lang.Исключение ArrayIndexOutOfBoundsException: [N / A].

Это вызывает у меня настоящую головную боль, поскольку на моем веб-сайте я постоянно получаю переменные, случайным образом исчезающие подобным образом.

Есть идеи о том, что здесь может происходить? CF9.0.1 Ent, работающий на Windows Server 2005.

Комментарии:

1. синтаксис name:value официально не поддерживается в ColdFusion, и вместо этого следует использовать синтаксис name=value: writeDump(var=isQuery(l.q), abort = true);

2. Я почти уверен, что синтаксис двоеточия поддерживается в CF9. Но в любом случае возникает эта ошибка.

Ответ №1:

Похоже, что все, что заполняет вашу переменную l.q, работает некорректно. Как заполняется l.q?

Если вы используете l = {} в качестве замены «локальной» области видимости — не делайте этого, у ColdFusion 9 уже есть локальная область внутри функций, и вы можете удалить ее.

Комментарии:

1. <имя cfquery=»l.q» … CF9 действительно имеет встроенную локальную область видимости, но старые привычки CF8 отмирают с трудом. В любом случае это имеет тот же эффект.

2. Я так понимаю, в самом cfquery нет ничего особенного? Вы пробовали присваивать запрос собственной переменной, например, var thisQuery = «;

3. Нет, просто обычный select. Я не уверен, что понял ваше предложение? вы имеете в виду var thisQuery = l.q? Чего бы это дало?

Ответ №2:

Находятся ли эти дампы в одном и том же месте? Помните, что если вы выполняете запрос, который ничего не возвращает (например, обновление или удаление), но используете параметр name, этой переменной будет присвоено значение undefined. Похоже, что это могло происходить здесь.

Комментарии:

1. Запрос определенно возвращает результат. Сброс количества записей приводит к 1.