Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 网络状态离线时AngularJS重新加载服务_Javascript_Angularjs_Ionic Framework_Service - Fatal编程技术网

Javascript 网络状态离线时AngularJS重新加载服务

Javascript 网络状态离线时AngularJS重新加载服务,javascript,angularjs,ionic-framework,service,Javascript,Angularjs,Ionic Framework,Service,我需要你的帮助 我正在尝试刷新服务,以防没有网络。当它离线时,它工作。但当它返回到联机状态时,当返回成功结果时,它将丢失内部代码 发生这种情况的原因是,起初没有网络,网络出现故障,导致内部代码无法运行 controller.js中的代码是: .controller('Home', function($scope, $state, Service_Caller) { var url = "http://localhost:8080/getUsers"; Service_Calle

我需要你的帮助

我正在尝试刷新服务,以防没有网络。当它离线时,它工作。但当它返回到联机状态时,当返回成功结果时,它将丢失内部代码

发生这种情况的原因是,起初没有网络,网络出现故障,导致内部代码无法运行

controller.js中的代码是:

.controller('Home', function($scope, $state, Service_Caller) {
    var url = "http://localhost:8080/getUsers";

    Service_Caller.get(url, "GET", Service_Caller).then(function(resp) { 
      // return this is status network is online.
      // in case offline, when refresh service again and network return online, service return response but this line not run.
      console.log(resp); 
    });
})
service.js

.factory('Service_Caller', function($http, $ionicPopup, $rootScope) {
    return {
    get: function (url_call, method, tryagain) {
        return $http({
              method: method,
              url: url_call,
              headers: {'Accept': 'application/json'}
            }).success(function(response){

                //****** if ONLINE! *******
                return response.data;

            }).error(function(err, status){

                //****** if OFFLINE! *******

                if(status == 0 || status == 502){
                  var confirmPopup = $ionicPopup.confirm({
                    title: "Error",
                    template: '<div class="col-100 text-center">No hay conexión de internet</div>',
                    buttons: [{
                      text: '<i class="ion-android-hand"></i>&nbsp;Cancelar',
                      type: 'button-default',
                      onTap: function(e) {
                        return false;
                      }
                    }, { 
                      text: '<i class="ion-android-refresh"></i>&nbsp;Refrescar',
                      type: 'button-assertive',
                      onTap: function(e) {

                        // execute again service.
                        tryagain.get(url_call, method, tryagain);

                      }
                    }]
                  });
                }

            });
        }
    }
})
.factory('Service\u Caller',函数($http、$ionicPopup、$rootScope){
返回{
get:函数(url\u调用、方法、tryagain){
返回$http({
方法:方法,,
url:url\u call,
标题:{'Accept':'application/json'}
}).成功(功能(响应){
//******如果在线*******
返回响应数据;
}).错误(功能(错误、状态){
//******如果离线*******
如果(状态==0 | |状态==502){
var confirmPopup=$ionicPopup.confirm({
标题:“错误”,
模板:“没有互联网公司”,
按钮:[{
文本:“取消”,
键入:“按钮默认值”,
onTap:功能(e){
返回false;
}
}, { 
文本:“Refrescar”,
键入:“按钮断言”,
onTap:功能(e){
//再次执行服务。
get(url_调用,方法,tryagain);
}
}]
});
}
});
}
}
})
知道如何在网络恢复时再次调用服务并返回响应吗?

运行以下命令

npm install ngCordova
cordova plugin add cordova-plugin-network-information
在index.html中为ngCordova添加脚本引用

将$Cordova网络注入工厂

.factory('Service_Caller',
 function($http, $ionicPopup, $rootScope, $cordovaNetwork) {
    return {
    get: function (url_call, method, tryagain) {
        var isOnline = $cordovaNetwork.isOnline();
        var isOffline = $cordovaNetwork.isOffline();
        var errorHandler=function(){
            if(status == 0 || status == 502){
                      var confirmPopup = $ionicPopup.confirm({
                        title: "Error",
                        template: '<div class="col-100 text-center">No hay conexión de internet</div>',
                        buttons: [{
                          text: '<i class="ion-android-hand"></i>&nbsp;Cancelar',
                          type: 'button-default',
                          onTap: function(e) {
                            return false;
                          }
                        }, { 
                          text: '<i class="ion-android-refresh"></i>&nbsp;Refrescar',
                          type: 'button-assertive',
                          onTap: function(e) {

                            // execute again service.
                            tryagain.get(url_call, method, tryagain);

                          }
                        }]
                      });
                    }
            }

            if($cordovaNetwork.isOnline())
            {

                $http({
                      method: method,
                      url: url_call,
                      headers: {'Accept': 'application/json'}
                    }).success(function(response){

                        return response.data;

                    }).error(function(err, status){
                        errorHandler();
                        //****** if OFFLINE! *******
                    });
            }
            else
            {
                errorHandler();
            }
        }
    }
})
.factory('Service\u Caller',
函数($http、$ionicPopup、$rootScope、$cordovaNetwork){
返回{
get:函数(url\u调用、方法、tryagain){
var isOnline=$cordovaNetwork.isOnline();
var isOffline=$cordovaNetwork.isOffline();
var errorHandler=函数(){
如果(状态==0 | |状态==502){
var confirmPopup=$ionicPopup.confirm({
标题:“错误”,
模板:“没有互联网公司”,
按钮:[{
文本:“取消”,
键入:“按钮默认值”,
onTap:功能(e){
返回false;
}
}, { 
文本:“Refrescar”,
键入:“按钮断言”,
onTap:功能(e){
//再次执行服务。
get(url_调用,方法,tryagain);
}
}]
});
}
}
如果($cordovaNetwork.isOnline())
{
$http({
方法:方法,,
url:url\u call,
标题:{'Accept':'application/json'}
}).成功(功能(响应){
返回响应数据;
}).错误(功能(错误、状态){
errorHandler();
//******如果离线*******
});
}
其他的
{
errorHandler();
}
}
}
})

我使用纯cordova插件,您可以使用两种方法:

方法1 安装插件

$cordova插件添加cordova插件对话框

然后将代码添加到您的服务中:

document.addEventListener("deviceready", function() {
  document.addEventListener("offline", onOffline, false);
  function onOffline() {

    function onDismissed() {
      navigator.app.exitApp();
      //or do other things
    }

    navigator.notification.alert(
      'Netowrk Error',
      onDismissed,
      'Network error message',
      'OK'
    );
  }
}, false);
document.addEventListener("deviceready", function() {
  document.addEventListener("offline", onOffline, false);

  function onOffline() {
      // Handle the offline event
  }

  document.addEventListener("online", onOnline, false);

  function onOnline() {
      // Handle the offline event
  }
}, false);
方法2 安装插件

$cordova插件添加cordova插件网络信息

然后将代码添加到您的服务中:

document.addEventListener("deviceready", function() {
  document.addEventListener("offline", onOffline, false);
  function onOffline() {

    function onDismissed() {
      navigator.app.exitApp();
      //or do other things
    }

    navigator.notification.alert(
      'Netowrk Error',
      onDismissed,
      'Network error message',
      'OK'
    );
  }
}, false);
document.addEventListener("deviceready", function() {
  document.addEventListener("offline", onOffline, false);

  function onOffline() {
      // Handle the offline event
  }

  document.addEventListener("online", onOnline, false);

  function onOnline() {
      // Handle the offline event
  }
}, false);