Как отобразить ошибку тайм-аута в angular js $http-вызовах?
Я делаю вызов ajax, используя $http в angular js. Я использовал тайм-аут в нем. Но я хочу показать пользователю сообщение об ошибке, если время соединения заканчивается. Ниже приведен код.
$http({
method: 'POST',
url: 'Link to be called',
data: $.param({
key:Apikey,
id:cpnId
}),
timeout : 5000,
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function(result){
alert(result);
}).error(function(data){
alert(data);
});
Есть ли способ, чтобы я мог отображать пользователя, если время соединения завершено.
Есть ли способ, чтобы его можно было настроить в одном месте?
Ответы
Ответ 1
И если вы хотите сделать что-то, когда время соединения завершено для каждого запроса, вы можете использовать перехватчики (глобальный параметр таймаута не работает):
// loading for each http request
app.config(function ($httpProvider) {
$httpProvider.interceptors.push(function ($rootScope, $q) {
return {
request: function (config) {
config.timeout = 1000;
return config;
},
responseError: function (rejection) {
switch (rejection.status){
case 408 :
console.log('connection timed out');
break;
}
return $q.reject(rejection);
}
}
})
})
Ответ 2
Попробуйте эту страницу блога: http://www.jonhartmann.com/index.cfm/2014/7/23/jsFiddle-Example-Proper-Timeout-Handling-with-AngularJS
Он имеет полный пример работы angular, который разрешает ваш вопрос.
Ответ 3
Для достижения этой цели вы можете использовать перехватчик angular.
$httpProvider.responseInterceptors
.push(['$q', '$injector','$rootScope', function ( $q, $injector,$rootScope) {
return function (promise) {
return promise.then(function (response) {
return response;
}, function (response) {
console.log(response); // response status
return $q.reject(response);
});
};
}]);
}]);
Подробнее см. эту ссылку
Ответ 4
Вам просто нужно проверить статус ответа и что он:
}).error(function(data, status, header, config) {
if (status === 408) {
console.log("Error - " + status + ", Response Timeout.");
}
});
Для глобального HTTP-тайм-аута ознакомьтесь с этим ответом