Функция jQuery ajax error

У меня есть передача данных ajax на страницу, которая затем возвращает значение.

Я получил успешный вызов со страницы, но я закодировал его так, чтобы он вызывал ошибку в asp. Как получить эту ошибку из jquery?

Например:

cache: false,
url: "addInterview_Code.asp",
type: "POST",
datatype: "text",
data: strData,
success: function (html) {
    alert('successful : ' + html);
    $("#result").html("Successful");
},
error: function (error) {
    **alert('error; ' + eval(error));**
}

Это ошибка, которую я не понимаю. В функции какой параметр мне нужно поставить, чтобы затем я мог использовать сообщение об ошибке, которое я поднял на сервере.

Ответ 1

Необходимыми параметрами в функции Ajax error являются jqXHR, exception, и вы можете использовать его, как показано ниже:

$.ajax({
    url: 'some_unknown_page.html',
    success: function (response) {
        $('#post').html(response.responseText);
    },
    error: function (jqXHR, exception) {
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    },
});

DEMO FIDDLE


Параметры

jqXHR:

Фактически это объект ошибки, который выглядит как

Ajax error jqXHR object

Вы также можете просмотреть это в своей собственной консоли браузера, используя console.log внутри функции error, например:

error: function (jqXHR, exception) {
    console.log(jqXHR);
    // Your error handling logic here..
}

Мы используем свойство status этого объекта, чтобы получить код ошибки, например, если мы получим статус = 404, это означает, что запрошенная страница не найдена. Это вообще не существует. Основываясь на этом коде состояния, мы можем перенаправить пользователей на страницу входа или независимо от нашей бизнес-логики.

исключение:

Это строковая переменная, которая показывает тип исключения. Итак, если мы получаем ошибку 404, текст exception будет просто "ошибкой". Точно так же мы можем получить "тайм-аут", "прервать" как другие тексты исключений.


Уведомление об изнашивании: Обратные вызовы jqXHR.success(), jqXHR.error() и jqXHR.complete() устарели от jQuery 1.8. Подготовить ваш код для их возможного удаления, используйте jqXHR.done(), jqXHR.fail(), и jqXHR.always().

Итак, если вы используете jQuery 1.8 или выше, нам нужно будет обновить логику функций успеха и ошибок, например: -

// Assign handlers immediately after making the request,
// and remember the jqXHR object for this request
var jqxhr = $.ajax("some_unknown_page.html")
    .done(function (response) {
        // success logic here
        $('#post').html(response.responseText);
    })
    .fail(function (jqXHR, exception) {
        // Our error logic here
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#post').html(msg);
    })
    .always(function () {
        alert("complete");
    });

Надеюсь, что это поможет!

Ответ 2

Попробуй это:

error: function(jqXHR, textStatus, errorThrown) {
  console.log(textStatus, errorThrown);
}

Если вы хотите сообщить своему фронту об ошибке проверки, попробуйте вернуть json:

dataType: 'json',
success: function(data, textStatus, jqXHR) {
   console.log(data.error);
}

Ваш сценарий asp должен вернуться:

{"error": true}

Ответ 3

Вот как вы вытаскиваете ошибку asp.

              cache: false,
              url: "addInterview_Code.asp",
              type: "POST",
              datatype: "text",
              data: strData,
              success: function (html) {
                  alert('successful : ' + html);
                  $("#result").html("Successful");
              },
              error: function (jqXHR, textStatus, errorThrown) {
                  if (jqXHR.status == 500) {
                      alert('Internal error: ' + jqXHR.responseText);
                  } else {
                      alert('Unexpected error.');
                  }
              }

Ответ 5

          cache: false,
          url: "addInterview_Code.asp",
          type: "POST",
          datatype: "text",
          data: strData,
          success: function (html) {
              alert('successful : ' + html);
              $("#result").html("Successful");
          },
          error: function(data, errorThrown)
          {
              alert('request failed :'+errorThrown);
          }

Ответ 6

вы используете функцию

error(error) 

но jquery фактически ищет функцию с тремя параметрами:

error(jqXHR, textStatus, errorThrown)

вам нужно добавить еще два параметра.

ТАКЖЕ: пожалуйста, просмотрите все комментарии выше, которые упоминают "устаревшие":)

$.ajax("www.stackoverflow.com/api/whatever", {
    dataType:"JSON"
    data: { id=1, name='example' }
}).succes(function (result) {
    // use result
}).error(function (jqXHR, textStatus, errorThrown) {
    // handle error
});

Ответ 7

От jquery.com:

The jqXHR.success(), jqXHR.error(), and jqXHR.complete()
callback methods introduced injQuery 1.5 are deprecated
as of jQuery 1.8. To prepare your code for their eventual 
removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead.

Если вы хотите использовать глобальные обработчики, вы можете использовать:

.ajaxStart(), .ajaxStop(),
.ajaxComplete(), .ajaxError(),
.ajaxSuccess(), .ajaxSend()