Прототип JS глотает ошибки в dom:loaded и ajax обратные вызовы?

Я не могу выяснить, почему прототип подавляет сообщения об ошибках в 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.

Почему это даже подавляет ошибки? Кто-то встречался с этим прежде?

7
задан Rob W 27 December 2011 в 17:58
поделиться

1 ответ

через некоторое время я обнаружил, что прототип перенаправляет все исключения в обработчик 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), второй - объект исключения. второй - объект исключения.

6
ответ дан 7 December 2019 в 05:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: