JQuery AJAX функция ошибок - PullRequest
109 голосов
/ 22 июля 2011

У меня есть вызов 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));**
}

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

Ответы [ 7 ]

191 голосов
/ 28 января 2013

Обязательные параметры в функции 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из этого объекта, чтобы получить код ошибки, например, если мы получим status = 404, это означает, что запрашиваемая страница не может быть найдена.Это не существует вообще.На основе этого кода состояния мы можем перенаправлять пользователей на страницу входа или в соответствии с требованиями нашей бизнес-логики.

исключение:

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


Примечание об устаревании: 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");
    });

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

87 голосов
/ 22 июля 2011

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

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

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

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

Ваш скрипт asp должен вернуть:

{"error": true}
4 голосов
/ 26 августа 2014

Вот как вытащить ошибку 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.');
                  }
              }
2 голосов
/ 27 января 2017

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

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
});
2 голосов
/ 03 июля 2013
          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);
          }
2 голосов
/ 22 июля 2011
error(jqXHR, textStatus, errorThrown)

http://api.jquery.com/jQuery.ajax/

0 голосов
/ 17 декабря 2014

От 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...