Как обрабатывать ответ 204 в jQuery ajax?

Поскольку я объявлял параметры ajax успеха и ошибки, где ответ равен 204, метод ajax переходит к успешному варианту, что приводит к ошибке.

В соответствии с документацией мы можем использовать методы StatusCode или Complete, но недостатком здесь является объявление всего кода состояния, такого как 2?? серия, 3?? серия, 4?? серии! Поскольку эти ответы являются динамическими, и я не уверен в отношении кода статуса http.

Итак, что является лучшим способом обработки кода статуса http в jQuery ajax?

Ответ 1

Объекты jqXHR, возвращаемые $.ajax() из jQuery 1.5, реализуют интерфейс Promise. Третий аргумент в выполненной функции - это объект jqXHR. Этот объект имеет свойство для кода состояния http результата.

jqXHR.done(функция (data, textStatus, jqXHR) {}); Альтернатива построить для опции обратного вызова успеха, метод .done() заменяет устаревший метод jqXHR.success(). Обратитесь к разделу deferred.done() для осуществление подробности. ссылка

    $.ajax({
      url: "http://fiddle.jshell.net/favicon.png",
      beforeSend: function ( xhr ) {
          xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
      }
    }).done(function ( data, textStatus, jqXHR) {
       console.log(jqXHR.status); //handle your 204 or other status codes here
    });

Fiddle http://jsfiddle.net/puleos/fVa7X/

Предполагая, что вы хотите обрабатывать все коды статуса не 200, как ошибку, вы можете сделать что-то вроде этого:

var p = $.ajax({
          url: "http://fiddle.jshell.net/favicon.png",
          beforeSend: function ( xhr ) {
             xhr.overrideMimeType("text/plain; charset=x-user-defined"); 
          }
        });

p.done(function(data, textStatus, jqXHR) {
  if(jqXHR.status !== 200) {
     handleError(jqXHR.status);
     return;
  }
  // Normal processing here
});

p.fail(function(jqXHR, textStatus) {
   handleError(jqXHR.status); 
});

Ответ 2

Решение выше - хорошее решение, но для тех, кто уже определяет "успех" и "ошибку" для многих компонентов, это связано с большим количеством изменений кода.

После чтения документации достаточно легко получить код состояния:

jQuery.ajax({
..
'success' : function(data,textStatus,jqXHR) {
    if (jqXHR.status == "204") {

    }
},
error : function(jqXHR, exception) {
        // Manage error 
    },

http://api.jquery.com/jquery.ajax/ = > statusCode

Затем, чтобы проверить код состояния, jqXHR.status выполнит трюк