Я планировал создать настраиваемое предупреждающее сообщение в соответствии с кодами ошибок. Так что я должен получить коды ошибок при отправке запроса на сервер и получении ответа от сервера.
500 - Некоторые вещи поступили не так. 403- произошла техническая ошибка; 401 - Файл не найден. 400- несанкционированного доступ:
В приложении, я могу захватить код ошибки в httpinterceptor
ответ , но я не в состоянии захватить код ошибки в отсроченных обещаниях.
var app = angular.module('myApp', []);
app.run();
контроллер:
var app = angular.module('myApp', []);
app.run();
app.controller('myController', ['$scope', 'myService', function ($scope, myService) {
var myCtrl = this;
myCtrl.EmployeeList = [];
myService.getData().then(function (data,status) {
myCtrl.EmployeeList = data;
console.log(status);
}), (function (data, status) {
if (status === 500) {
toastr.warn("technical error occurred");
}
else if (status === 400) {
toastr.warn("something went wrong");
}
});
}]);
var app = angular.module('myApp');
app.factory('myService', ['$http', '$q', function ($http, $q) {
var fact = {};
fact.getData = function() {
var deferred = $q.defer();
//$http.get('/Test/getData',
$http.get('http://simpleApiEarl.azurewebsites.net/api/envelopes',
{
cache: true
})
.then(function (response) {
if (typeof response.data === 'object')
{
deferred.resolve(response.data);
}
else
{
debugger;
deferred.reject(response.data);
console.log("Error:" +response.status);
}
}, function (response, status) {
console.log(response.status);
deferred.reject(response.data,status);
});
return deferred.promise;
}
return fact;
}]);
Работа в interceptor
:
var interceptor = function ($q, $rootScope) {
return {
request: function (config) {
console.log(config);
return config;
},
response: function (response) {
var deferred = $q.defer();
return response || $q.when(response);
},
responseError: function (rejection) {
if (rejection.status == 500)
{
alert('Bad Request Processed');
return $q.reject(rejection);
}
if(rejection.status == 403)
{
alert('some thing went wrong');
}
}
}
};
$httpProvider.interceptors.push(interceptor);
проблема: Почему я не в состоянии захватить код ошибки в отсроченных обещаниям отбросим ответ ?
Скриншот:
Перед отправкой вызова службы:
После отвержение получения статуса 0
я получаю код ошибки в httpinterceptors, но я не получаю в ответ на ошибку отклонения $ q. обновили скриншот. –
Хорошо, я вижу, теперь открываются каждый каждый объект в 'response', такой как' config', 'headers' ... И у вас есть ошибка CORS, а это означает, что вы не установили свой' Access-Control-Allow-Origin 'header в вашем сервере. Вы знаете эту ошибку или нет? – trichetriche
Я знаю ошибку, я помещаю этот url для отображения кода ошибки. Мой вопрос не способен зафиксировать код ошибки в $ q rejection, его статус показывает как 0, а для 403. этот код ошибки способен захватывать в httpinterceptor , почему я не могу его захватить. –