Я не могу выяснить, почему прототип подавляет сообщения об ошибках в dom:loaded
событие, и в обработчиках Ajax.
Учитывая следующую часть HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Conforming XHTML 1.1 Template</title>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
document.observe('dom:loaded', function() {
console.log('domready');
console.log(idontexist);
});
</script>
</head>
<body>
</body>
</html>
domready огни события, я вижу журнал в консоли, но нет никакого признака никаких ошибок вообще. Если Вы перемещаетесь console.log(idontexist);
строка из обработчика, Вы добираетесь
idontexist не определяется
ошибка в консоли. Я нахожу его немного странным, что в других обработчиках событий, как 'щелчок', Вы получаете сообщение об ошибке, кажется, что это только dom:loaded
это имеет эту проблему.
То же идет для обработчиков Ajax:
new Ajax.Request('/', {
method: 'get',
onComplete: function(r) {
console.log('xhr complete');
alert(youwontseeme);
}
});
Вы не будете видеть ошибок. Это с prototype.js 1.6.1, и я не могу найти признак этого поведения в документах, ни способ включить сообщение об ошибке в этих обработчиках.
Я попытался ступить через код с отладчиком FireBug, и это, кажется, переходит к функции на строку 53 названных K, когда он встречается с отсутствующей переменной в dom:loaded
обработчик:
K: function(x) { return x }
Но как? Почему? Когда? Я не вижу блока попытки/выгоды там, как процесс выполнения программы заканчивается там?
Я знаю, что могу совершить ошибки, видимые путем упаковки моего dom:ready
обработчик (обработчики) в блоках попытки/выгоды, но это не очень удобная опция. То же идет для регистрации глобального onException обработчика для вызовов Ajax.
Почему это даже подавляет ошибки? Кто-то встречался с этим прежде?
через некоторое время я обнаружил, что прототип перенаправляет все исключения в обработчик onException:
new Ajax.Request('/ajax_html_echo', {
method: 'get',
onComplete: function(r) {
console.log('xhr complete');
alert(undefinedVar)
},
onException: function(request,e){
console.log(e.message); // prints undefinedVar is not defined
}
});
больше информации здесь
http://www.prototypejs.org/api/ajax/options
onException Срабатывает всякий раз, когда возникает XHR возникает ошибка XHR. Имеет пользовательскую сигнатуру: первый аргумент - запросчик (т.е. экземпляр Ajax.Request), второй - объект исключения. второй - объект исключения.