Javascript 网络状态离线时AngularJS重新加载服务
我需要你的帮助 我正在尝试刷新服务,以防没有网络。当它离线时,它工作。但当它返回到联机状态时,当返回成功结果时,它将丢失内部代码 发生这种情况的原因是,起初没有网络,网络出现故障,导致内部代码无法运行 controller.js中的代码是: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('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> Cancelar',
type: 'button-default',
onTap: function(e) {
return false;
}
}, {
text: '<i class="ion-android-refresh"></i> 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> Cancelar',
type: 'button-default',
onTap: function(e) {
return false;
}
}, {
text: '<i class="ion-android-refresh"></i> 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);