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 56

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");
        }
    });
}