Coldfusion: конфликтующие операторы cfdump

У меня есть запрос l.q. l имеет переменную область видимости:

var l = {};

Если я сброшу л:

writeDump(var:l, abort:true);

Я получаю dump of l

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

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

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

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

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

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


person James Hull    schedule 17.05.2011    source источник
comment
синтаксис имя:значение официально не поддерживается в ColdFusion, вместо него следует использовать синтаксис имя=значение: writeDump(var=isQuery(l.q), abort=true);   -  person duncan    schedule 18.05.2011
comment
Я почти уверен, что синтаксис двоеточия поддерживается в CF9. Но в любом случае эта ошибка возникает.   -  person James Hull    schedule 18.05.2011


Ответы (2)


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

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

person Stephen Moretti    schedule 17.05.2011
comment
‹cfquery name=l.q ... CF9 имеет встроенную локальную область видимости, но старые привычки CF8 не умирают. В любом случае эффект одинаков. - person James Hull; 17.05.2011
comment
Я так понимаю, в самом cfquery ничего особенного нет? Пробовали ли вы присвоить запрос собственной переменной, например, var thisQuery = ''; - person Stephen Moretti; 18.05.2011
comment
Нет, просто обычный выбор. Я не уверен, что понял ваше предложение? вы имеете в виду var thisQuery = l.q? Что бы это дало? - person James Hull; 28.05.2011

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

person Zugwalt    schedule 17.05.2011
comment
Запрос обязательно возвращает результат. Сброс количества записей приводит к 1. - person James Hull; 28.05.2011