Обработка ошибок JQuery AJAX (коды состояния HTTP)
У нас есть API, который использует правильные коды состояния HTTP для ошибок и отвечает на JSON-кодированные ответы и соответствующий заголовок Content-Type
. Моя ситуация заключается в том, что jQuery.ajax()
вызывает обратный вызов error
, когда он встречает статус ошибки HTTP, а не обратный вызов success
, поэтому даже когда у нас есть понятный ответ JSON, мы должны прибегнуть к чему-то вроде этого:
$.ajax({
// ...
success: function(response) {
if (response.success) {
console.log('Success!');
console.log(response.data);
} else {
console.log('Failure!');
console.log(response.error);
}
},
error: function(xhr, status, text) {
var response = $.parseJSON(xhr.responseText);
console.log('Failure!');
if (response) {
console.log(response.error);
} else {
// This would mean an invalid response from the server - maybe the site went down or whatever...
}
}
});
Есть ли лучшая парадигма, чем выполнение одинаковой обработки ошибок в двух местах в каждом вызове jQuery.ajax()
? Это не очень СУХОЙ, и я уверен, что я просто что-то пропустил в хороших методах обработки ошибок в этих случаях.
Ответы
Ответ 1
Отъезд jQuery.ajaxError()
Он обнаруживает глобальные ошибки Ajax, которые вы можете обрабатывать различными способами:
if (jqXHR.status == 500) {
// Server side error
} else if (jqXHR.status == 404) {
// Not found
} else if {
...
В качестве альтернативы вы можете сами создать объект обработчика глобальной ошибки и выбрать, следует ли его называть:
function handleAjaxError(jqXHR, textStatus, errorThrown) {
// do something
}
$.ajax({
...
success: function() { ... },
error: handleAjaxError
});