Javascript, загружаемый через jQuery Ajax, не генерирует ожидаемые исключения в Firebug - PullRequest
1 голос
/ 01 сентября 2011

У меня есть функции Javascript, которые выдают исключения, если что-то идет не так.Я так привык к такому поведению, что однажды мне потребовалось более 20 минут, чтобы найти ошибку в коде, потому что функция не вызвала исключение, она просто молча вышла из строя.

Попробуйте следующий код в Firefox сПлагин Firebug.Создайте HTML-страницу с функцией:

function myfunc(key)
{ 
  alert('I started');
  if(!key)
     throw 'myfunc: Invalid arguments';
}

Затем создайте вторую HTML-страницу с кодом:

<script type="text/javascript">
myfunc(null);
alert('Exception was before me!');
</script> 

и загрузите эту вторую HTML-страницу с первой страницы с помощью jQuery $ .ajax.function.

Код будет выполнен правильно, но вы не увидите никаких исключений, зарегистрированных в консоли Firebug.

Если вы запустите ту же функцию myfunc (null) прямо на первой html-страницевы сразу увидите в Firebug красную строку:

uncaught exception: myfunc: Invalid arguments

Но ничего не выходит из системы, если она выполняется jQuery (я думаю, jQuery использует eval для запуска сценариев после $ .ajax).

Значит ли это, что сам jQuery перехватывает исключения и игнорирует их при оценке Javascript?Могу ли я сказать jQuery, чтобы мои исключения проходили?

Ответы [ 3 ]

0 голосов
/ 01 сентября 2011

если вы хотите увидеть исключение в FireBug, вам нужно будет использовать console.log('Exception message'); вместо alert('Exception message');

0 голосов
/ 24 сентября 2011

Кажется, это была ошибка или отсутствующая функция jQuery 1.4.Мы обновили до 1.6, и теперь исключения проходят, даже когда код Javascript загружается и оценивается с помощью вызова jQuery $ .ajax.

0 голосов
/ 01 сентября 2011

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

Причина в том, что в противном случае сервер полагает, что это была ошибка, а не запрос, и выдает ошибку там.

...