jQuery:как получить код состояния HTTP из$.Аякс.методом проб и ошибок?
Я использую 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, когда есть ошибка проверки пользователя/формы?
4 ответа:
Если вы используете jQuery 1.5, то
statusCode
будет работать.Если вы используете jQuery 1.4, попробуйте следующее:
error: function(jqXHR, textStatus, errorThrown) { alert(jqXHR.status); alert(textStatus); alert(errorThrown); }
вы должны увидеть код состояния первого предупреждения.
вы должны создать карту действий, используя
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. } }
использовать
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'); } } });
другое решение-использовать ответ.функция состояния. Это даст вам статус 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"); } }); }