Как поймать сообщение об ошибке Ajax-запроса?

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

6 ответов


начиная с 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");
  }
});

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.


$.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);
  }
});

$.post('someUri', { }, 
  function(data){ doSomeStuff })
 .fail(function(error) { alert(error.responseJSON) });

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

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

например:

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

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

$('.log').ajaxError(function(e, xhr, settings, exception) {
  if (settings.url == 'ajax/missing.html') {
    $(this).text('Triggered ajaxError handler.');
  }
});

я исправил эту проблему путем объявления datatype: 'json' в моем вызове jQuery ajax.