2013-04-25 4 views
12

Как я уже сказал, параметры ajax успеха и ошибки, где ответ равен 204, метод ajax переходит к успешному варианту, что приводит к ошибке.Как обрабатывать ответ 204 в jQuery ajax?

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

Итак, это лучший способ справиться с кодом статуса http в jquery ajax?

ответ

13

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

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

$.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); 
}); 
+0

не могли бы вы объяснить мне метод jqXHR.done с любым примером? как обрабатывать код состояния? –

+0

Я представил скрипку, показывающую, как вы можете проверить код состояния. Как вы справляетесь с этим, это зависит от контекста создаваемого вами приложения. –

+0

Выполняет ли описанный выше метод только устаревший метод jqXHR.success()? Для обработки ошибок мне нужно создать отдельный метод? Bcoz Я попытался поиграть в jsfiddle, изменив URL-адрес, и он не обрабатывает код ошибки! –

4

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

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

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 сделают трюк

Смежные вопросы