Как я могу поймать сообщение об ошибке Ajax-запроса? - PullRequest
196 голосов
/ 14 мая 2010

Я хотел бы отловить ошибку и показать соответствующее сообщение, если запрос Ajax не выполнен.

Мой код похож на следующий, но мне не удалось поймать сбойный запрос Ajax.

function getAjaxData(id)
{
     $.post("status.ajax.php", {deviceId : id}, function(data){

        var tab1;

        if (data.length>0) {
            tab1 = data;
        }
        else {
            tab1 = "Error in Ajax";
        }

        return tab1;
    });
}

Я обнаружил, что «Ошибка в Ajax» никогда не выполняется при сбое запроса Ajax.

Как мне обработать ошибку Ajax и показать соответствующее сообщение в случае сбоя?

Ответы [ 5 ]

275 голосов
/ 25 августа 2012

jQuery 1.5 добавил отложенные объекты, которые хорошо справляются с этим. Просто позвоните $.post и присоедините любые обработчики, которые вы хотите после вызова. Отложенные объекты даже позволяют подключать несколько обработчиков успеха и ошибок.

Пример:

$.post('status.ajax.php', {deviceId: id})
    .done( function(msg) { ... } )
    .fail( function(xhr, textStatus, errorThrown) {
        alert(xhr.responseText);
    });

До jQuery 1.8 функция done называлась success, а fail называлась error.

269 голосов
/ 14 мая 2010

Начиная с jQuery 1.5, вы можете использовать механизм отложенных объектов:

$.post('some.php', {name: 'John'})
    .done(function(msg){  })
    .fail(function(xhr, status, error) {
        // error handling
    });

Другой способ - .ajax:

$.ajax({
  type: "POST",
  url: "some.php",
  data: "name=John&location=Boston",
  success: function(msg){
        alert( "Data Saved: " + msg );
  },
  error: function(XMLHttpRequest, textStatus, errorThrown) {
     alert("some error");
  }
});
88 голосов
/ 14 мая 2010
$.ajax({
  type: 'POST',
  url: 'status.ajax.php',
  data: {
     deviceId: id
  },
  success: function(data){
     // your code from above
  },
  error: function(xhr, textStatus, error){
      console.log(xhr.statusText);
      console.log(textStatus);
      console.log(error);
  }
});
14 голосов
/ 01 марта 2014
$.post('someUri', { }, 
  function(data){ doSomeStuff })
 .fail(function(error) { alert(error.responseJSON) });
13 голосов
/ 14 мая 2010

Простой способ - реализовать ajaxError :

Всякий раз, когда Ajax-запрос завершается с ошибкой jQuery вызывает Событие ajaxError. Любой и все обработчики которые были зарегистрированы с .ajaxError () метод выполняется в на этот раз.

Например:

$('.log').ajaxError(function() {
  $(this).text('Triggered ajaxError handler.');
});

Я бы предложил прочитать документацию ajaxError . Он делает больше, чем простой пример использования, показанный выше - в основном его обратный вызов принимает ряд параметров:

$('.log').ajaxError(function(e, xhr, settings, exception) {
  if (settings.url == 'ajax/missing.html') {
    $(this).text('Triggered ajaxError handler.');
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...