исключения в обработчиках аякс-запросов
в prototype.js используется не совсем очевидный способ работы с исключениями, возникающими при обработке аякс-запросов: по умолчанию они подавляются и не попадают в консоль ошибок вообще. Чтобы их видеть, нужно добавлять в параметры запросов
onException: function logException(request, exception) {
// handle exception
}
или зарегистрировать глобальный обработчик:
Ajax.Responders.register({ onException: logException });
Однако при этом может возникнуть коллизия с другой фичей фреймворка: автоматическим исполнением пришедшего с сервера яваскрипта. По умолчанию установлено evalJS: true
, и если в заголовках обнаружится что-то вроде Content-Type: text/javascript
, прототайп попробует исполнить тело ответа как код, словит исключение, и передаст его в onException
.
бороться с этим явлением можно двумя способами: либо добавлять в параметры каждого аякс-запроса evalJS: false
, либо отдавать json с Content-Type: application/json
. Первый способ просто непрактичен — некрасиво и где-нибудь наверняка забудется. Второй иногда невозможен…
хорошего решения проблемы я пока не знаю : (