gpt4 book ai didi

javascript - $http 在异步方法中不起作用 - AngularJS 和 PhoneGap

转载 作者:太空狗 更新时间:2023-10-29 14:21:54 24 4
gpt4 key购买 nike

我尝试使用 PhoneGap 和 AngularJS 制作一个可以在线和离线使用的应用程序(适用于 Android 设备)。
如果设备处于离线状态,我想从本地数据库获取人员列表;如果设备在线,我想使用 $http 从 Web 服务获取人员列表。但是当设备在线时,它不工作,不调用网络服务。

我认为问题出在 PhoneGap 异步方法上。事实上,在离线模式下,它可以工作,但我需要使用 $scope.$apply 来更新我的 View 。但这不适用于 $http...

有人知道如何在异步方法中使用 $http 吗?

function ListCtrl ($scope, $http){
$scope.list = [];
$scope.Id = 2;

$scope.init = function(){
document.addEventListener("deviceready", getList, false);
}

$scope.getAll = function(){

$http({
url: 'http://10.0.0.2:63414/myWebMethod/' + $scope.Id,
method: 'GET',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).success(function(data) {
$scope.list = data;
});
}

function getList(){
var db = window.openDatabase("Database", "1.0", "list", 200000);
var network = navigator.connection.type;
if (network == "none"){
// local database transaction works fine
} else {
$scope.getAll();
}
$scope.$apply();
}

$scope.init();
}

最佳答案

在成功回调中,您还必须使用 $scope.$apply(); 触发摘要

$http({
url: 'http://10.0.0.2:63414/myWebMethod/' + $scope.Id,
method: 'GET',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
}
}).success(function(data) {
$scope.list = data;
$scope.$apply();
});

$http 请求是异步的,所以在你从你的请求中得到任何响应之前,程序将继续执行,你放在 if (network == "none") 语句之后的 $scope.$apply() 将白白运行(你可以删除它)。

PhoneGap 查询正在运行,因为您在它的回调中使用了 $scope.$apply() ,并且您必须在 $http 成功回调中执行相同的操作。

关于javascript - $http 在异步方法中不起作用 - AngularJS 和 PhoneGap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com