当浏览处于离线模式时,我从服务调用中收到错误。当浏览器处于离线模式时,如何检查离线模式并希望阻止我的服务呼叫?
答案 0 :(得分:4)
我建议您使用Offline.js
他们有模板和其他东西可以使用。 你可以查看他们的documentation,看看它是如何运作的。
它通过返回" up"来获取连接的当前状态。或" down"结果,或者你可以绑定和事件,并在你的应用程序中使用它。
这就是他们对图书馆的看法:
祝你好运,玩得开心。Offline.js是一个图书馆,可以在用户丢失互联网连接时自动提醒用户,例如Gmail。
它捕获在连接断开时创建的AJAX请求,并在备份时重新创建它们,以便您的应用程序做出完美的反应。
它有许多漂亮的主题,无需配置。
答案 1 :(得分:2)
检查navigator.onLine
并根据此值决定是否发送请求。
if (navigator.onLine) {
$http.get('url').success(function() {});
}
else {
// no req
}
Angular方式:
使用$q
服务 - 一种帮助您异步运行函数的服务,并在完成处理时使用它们的返回值(或异常)。 https://docs.angularjs.org/api/ng/service/ $ Q
我知道的最好的方法是拦截HTTP处理程序,如果它是401/501 /等,那么根据它来处理它
angular.module('myApp', ['myApp.services'],
function ($httpProvider) {
var interceptor = ['$rootScope', '$q', function ($rootScope, $q) {
function success(response) {
return response;
}
function error(response) {
var status = response.status; // error code
if ((status >= 400) && (status < 500)) {
$rootScope.broadcast("AuthError", status);
return;
}
if ( (status >= 500) && (status < 600) ) {
$rootScope.broadcast("ServerError", status);
return;
}
// otherwise
return $q.reject(response);
}
return function (promise) {
return promise.then(success, error);
}
}];
$httpProvider.responseInterceptors.push(interceptor);
然后在你的代码中监听on,只需添加
$rootScope.$on("ServerError", someServerErrorFunction);