Это может показаться странным запросом. Мне было интересно, есть ли способ использовать перехватчик $ http, чтобы поймать первый URL-адрес, который имеет статус ответа 500, а затем остановить все последующие запросы и процессы и что-то сделать?AngularJS: Получить весь статус ответа 500
ответ
Вы можете поймать все ответы через $httpProvider.responseInterceptors
.
Для этого нужно создать фабрику, как это:
app.factory('SecurityHttpInterceptor', function($q) {
return function (promise) {
return promise.then(function (response) {
return response;
},
function (response) {
if (response.status === 500) {
//DO WHAT YOU WANT
}
return $q.reject(response);
});
};
});
В этой фабрике Вы поймаете статус ответа, если это 500 сделать то, что вы хотите. Затем отклоните ответ.
Теперь вы должны поставить завод в responseInterceptors
из $httProvider
в модуле конфигурации так:
app.config(function ($routeProvider, $httpProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/home.html',
controller: 'HomeCtrl'
})
.otherwise({
templateUrl: 'views/404.html'
});
$httpProvider.responseInterceptors.push('SecurityHttpInterceptor');
})
Вы можете создать службу и перехватчик для борьбы с этим,
.factory('ServerErrorService', function() {
var _hasError = false
return {
get hasError() {
return _hasError;
},
set hasError(value) {
_hasError = value;
// you could broadcast an event on $rootScope to notify another service that it has to deal with the error
},
clear: clear
}
function clear() {
_hasError = false;
}
})
.factory('ServerErrorInterceptor', function ($q, ServerErrorService) {
var interceptor = {
request: function(config) {
if(ServerErrorService.hasError) {
var q = $q.defer();
q.reject('prevented request');
return q.promise;
}
return config;
},
responseError: function(response) {
if(response.status === 500) {
ServerErrorService.hasError = true;
}
return $q.reject(response);
}
}
return interceptor;
})
Если вы хотели разрешить повторные запросы, тогда вам просто нужно позвонить ServerErrorService.clear()
OR
Вы можете использовать модифицированную версию этого ответа. Хотя я не уверен, как - если бы вы захотели - вы отмените это действие и разрешите последующие запросы.
https://stackoverflow.com/a/25475121/1798234
.factory('ServerErrorInterceptor', function ($q) {
var canceller = $q.defer();
var interceptor = {
request: function(config) {
config.timeout = canceller.promise;
return config;
},
responseError: function(response) {
if(response.status === 500) {
canceller.resolve('server error');
}
return $q.reject(response);
}
}
return interceptor;
})
Одна вещь, чтобы помнить оба эти решения, если у вас есть какие-либо другие перехватчики после этого, что есть метод responseError
определенный или обработчики, установленные с .catch
обрабатывать $ HTTP обещание, они будут получать объект ответа с {data:null, status:0}
Thomas answer является правильным, но это решение в настоящее время осуждается. Вы должны сделать что-то вроде этого answer.
app.factory('errorInterceptor', function ($q) {
var preventFurtherRequests = false;
return {
request: function (config) {
if (preventFurtherRequests) {
return;
}
return config || $q.when(config);
},
requestError: function(request){
return $q.reject(request);
},
response: function (response) {
return response || $q.when(response);
},
responseError: function (response) {
if (response && response.status === 401) {
// log
}
if (response && response.status === 500) {
preventFurtherRequests = true;
}
return $q.reject(response);
}
};
});
app.config(function ($httpProvider) {
$httpProvider.interceptors.push('errorInterceptor');
});
- 1. Получить статус ответа HTTP-ответа на AngularJS
- 2. Как получить статус ответа
- 3. 500 http-статус маршрутизации в angularjs
- 4. Попытайтесь получить статус моего ответа
- 5. Axis2: Http статус 500
- 6. Отладка ответа 500 http
- 7. Джанго показывает 500 статус
- 8. Неожиданный статус HTTP-ответа
- 9. Получить весь статус от JIRA webservice
- 10. Handle статус HTTP 500
- 11. Как получить статус ответа команды POST jquery?
- 12. Как получить статус от этого ответа?
- 13. AFNetworking 500 тело ответа
- 14. Solr 4.3.0 Http Статус 500
- 15. Spotify Web API возвращает статус 500 на получить плейлисты запросить
- 16. Spring MVC - HTTP-статус 500
- 17. .htaccess генерирует статус ошибки 500
- 18. статус 500 для запроса Ajax
- 19. Ошибка ответа 500 не совершена
- 20. Как получить статус ответа при отправке формы веб-API
- 21. Возвращайтесь особый статус ответа HTTP в JSP
- 22. AngularJS $ http неверный статус http при ошибке
- 23. статус ответа 0 с Ext.Ajax.request
- 24. com.sun.jersey.api.client.UniformInterfaceException (возвращает статус ответа 400)
- 25. BasicNetwork.performRequest: Неожиданный код ответа 500
- 26. Неожиданный код ответа 500 Android
- 27. Угловой 1.5, статус ответа на ошибку всегда -1
- 28. OWIN StaticFiles not found дает статус 500
- 29. статус ошибки и тело ответа activeresource
- 30. AngularJS возвращается статус службы
Жаль, что я должен был сказать, я знал, как сделать перехватчик, мне было интересно, если есть способ, на самом деле «стоп» за $ http.pendingRequests очереди в первый раз статус 500 возникновении ошибки. –
Я также ищу решение для остановки всех последующих запросов при обнаружении определенного кода состояния (403 в моем случае). У меня уже есть перехватчик, но не знаю, как продолжить оттуда. Поделитесь, если у вас есть решение этого, спасибо. – Mark