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 при ошибке проверки пользователя/формы?
Ответы
Ответ 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, содержащих