Подтвердить что ты не робот

JQuery: Как получить код статуса HTTP из метода $.ajax.error?

Я использую jQuery для создания запроса AJAX. Я хочу выполнить различные действия независимо от того, является ли код состояния HTTP ошибкой 400 или 500 ошибкой. Как я могу достичь этого?

$.ajax({
    type: 'POST',
    url: '/controller/action',
    data: $form.serialize(),
    success: function(data){
        alert('horray! 200 status code!');
    },
    error: function(data){
        //get the status code
        if (code == 400) {
            alert('400 status code! user error');
        }
        if (code == 500) {
            alert('500 status code! server error');
        }
    },
});

Обновление:

@GeorgeCummins упомянул, что "казалось странным" работать с телом ответа. Это первый раз, когда я пытался делать подобные вещи. Является ли мой подход не лучшей практикой? Чтобы вы посоветовали? Я создал еще один вопрос StackOverflow для этого здесь: Какой код ответа/статуса должен быть отправлен на запрос AJAX при ошибке проверки пользователя/формы?

4b9b3361

Ответ 1

Если вы используете jQuery 1.5, то statusCode будет работать.

Если вы используете jQuery 1.4, попробуйте следующее:

error: function(jqXHR, textStatus, errorThrown) {
    alert(jqXHR.status);
    alert(textStatus);
    alert(errorThrown);
}

Вы должны увидеть код состояния из первого предупреждения.

Ответ 2

Вы должны создать карту действий с помощью параметра statusCode:

$.ajax({
  statusCode: {
    400: function() {
      alert('400 status code! user error');
    },
    500: function() {
      alert('500 status code! server error');
    }
  }
});

Ссылка (Прокрутите до: 'statusCode')

EDIT (в ответ на комментарии)

Если вам нужно принять действие на основе данных, возвращаемых в тело ответа (что кажется мне странным), вам нужно будет использовать error: вместо statusCode:

error:function (xhr, ajaxOptions, thrownError){
    switch (xhr.status) {
        case 404:
             // Take action, referencing xhr.responseText as needed.
    }
} 

Ответ 3

использование

   statusCode: {
    404: function() {
      alert('page not found');
    }
  }

-

$.ajax({
    type: 'POST',
    url: '/controller/action',
    data: $form.serialize(),
    success: function(data){
        alert('horray! 200 status code!');
    },
    statusCode: {
    404: function() {
      alert('page not found');
    },

    400: function() {
       alert('bad request');
   }
  }

});

Ответ 4

Другое решение - использовать функцию response.status. Это даст вам статус http, возвращаемый вызовом ajax.

function checkHttpStatus(url) {     
    $.ajax({
        type: "GET",
        data: {},
        url: url,
        error: function(response) {
            alert(url + " returns a " + response.status);
        }, success() {
            alert(url + " Good link");
        }
    });
}

Ответ 5

Lorem Ipsum - просто фиктивный текст в полиграфии и вёрстке. Лорем Ипсум был стандартным манекенщиком промышленного образца с 1500-х годов, когда неизвестный принтер взял набор шрифтов и скремблировал его, чтобы сделать книгу типовых образцов. Он пережил не только пять веков, но и скачок в электронном наборе текста, оставаясь практически неизменным. Он был популяризирован в 1960-х годах с выпуском листов Letraset, содержащих