Как работает $ .ajaxError? - PullRequest
       5

Как работает $ .ajaxError?

3 голосов
/ 29 июня 2010

Я широко использую $ .get, $ .post и $ .getJSON, поэтому я хотел посмотреть, как работает .ajaxError.Я попробовал это ...

$(document).ajaxError(function (e, xhr, options, error)
{
    console.log(e);
    console.log(xhr);
    console.log(options);
    console.log(error);
});

, и я также попытался поместить это в мой $(document).ready()..А потом я отключил сетевое соединение.В AJAX появилось множество ошибок из-за POST с (потому что они получали неожиданные ответы), и GET мгновенно возвращались (кэшировались), но в Firebug больше ничего не появлялось, как будто ajaxError никогда не былобудучи призваннымЧто я делаю неправильно?Я просто попытался снова без консольных журналов и просто alert('foo'), и снова ничего не произошло.Много ошибок, но ajaxError никогда не запускается.

Ответы [ 3 ]

6 голосов
/ 29 июня 2010

ajaxError запускается, когда фактический XHR не получает код успеха HTTP из данного ответа от сервера, , как вы можете видеть в источнике jQuery .Коды ответа в этой конкретной функции воспринимаются как коды «успеха»;что-то еще является ошибкой.

jQuery также только ветвится к коду, который запускает ajaxError, когда ваш XMLHTTPRequest завершается с readyState из 4 (в комплекте со всеми полученными данными), поэтому я думаю, что отключение вашегосетевое соединение фактически фактически поставило бы вас в другое состояние XHR (возможно, цикл условия 2?). Вы также можете видеть, как jQuery разветвляется в исходном коде .

По сути, он смотрит, что сервер не говорит, что запрос не выполнен, и отправляет обратно код, выходящий за пределы указанного выше диапазона, выскорее всего, не увидит срабатывания ajaxError, так как, согласно jQuery, он не получил ошибку.

1 голос
/ 29 июня 2010

Я получил следующий пример для работы с документом jQuery.

http://api.jquery.com/ajaxError/

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>jQuery Sandbox</title>
  </head>
  <body>
    <div class="trigger">Trigger</div>
    <div class="result"></div>
    <script type="text/javascript" src="../scripts/jquery-1.4.js"></script>
    <script type="text/javascript">

        $(function () {

            $(document).ajaxError(function (e, xhr, settings, exception) {
                console.log(xhr.status);
            });

            $('.trigger').click(function () {
                $('.result').load('ajax/thisUrlDoesNotExist.html');
            });

        });

    </script>
  </body>
</html>

Как выглядит ваша полная страница?

0 голосов
/ 29 апреля 2015

Если сделанный вызов ajax является междоменным, при сбое вызова ajaxError не запускается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...