如何离线和在线检查角度

时间:2015-05-30 07:13:56

标签: javascript angularjs restangular

当浏览处于离线模式时,我从服务调用中收到错误。当浏览器处于离线模式时,如何检查离线模式并希望阻止我的服务呼叫?

2 个答案:

答案 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);

来源:How to detect when online/offline status changes