Как вернуть обратный вызов.fail(), если возвращаемый dataType не является HTML?

Как я могу вернуть обратный вызов .fail(), если возвращаемый dataType не является HTML?

$.ajax({
  type:       "GET",
  dataType:   "html",
  url:        "server.php",
  async:      true,

  beforeSend: function() {
  },

  success: function (returndata) {

    console.log(returndata); // I will get {"message":"something"}

  }

}).fail(function(jqXHR) { // this callback does not work

    alert("error"); 

});

Например, в server.php,

header('Content-Type: application/json');
echo '{"message":"something"}';

я получу {"message":"something"} вместо error;

есть идеи?

редактировать:

    $.ajax({
        type:       "GET",
        dataType:   "xml",
        url:        "server.php",
        async:      true,

    beforeSend: function() {
    },

    success: function (returndata) {

        console.log(returndata); // I will get {"message":"something"}

    }

    }).fail(function(jqXHR) { // this callback does not work

        alert("error"); 

    });

если я изменю dataType: в "XML", он вернет ошибку (что я и хочу), когда ожидается XML - почему это не работает таким же образом для "HTML"?

1 ответ

Проверьте, отвечает ли ваш сервер JSON как кодировка простого текста или application/JSON. Если это JSON, используйте метод error() вместо fail(). В случае несоответствия типов контента он перейдет к методу ошибки. Вот пример.

$.ajax({
    type: "GET",
    dataType: "JSON",
    url: "google.com",
    async: true,
    success: function(data) {

    },
    error: function(err) {
        console.log("Err", err)
    }
});

Приведенный выше код будет нормально работать с методом ошибки и перейдет к ошибке, если тип содержимого html. Попробуйте это в вашем сценарии.

Другие вопросы по тегам