我的控制器中有一个函数调用api来检索一些值:
$scope.Refresh= function(){
$http.get('/get/value')
.success(function(data) {
//some actions
})
.error(function(data) {
//some actions
});
} ;
我想偶尔刷新一下这些值,所以我已经完成了:
setInterval($scope.Refresh, 100000);
我会以更好的方式做,但现在我想解决这个问题。
但是有一个问题:
如果在控制器中我说:$scope.Refresh
(第一次执行该功能),控制器什么也不做。
如果我编写相同的函数+ setInterval(以测试并运行它)它第一次(在函数外部),但永远不会刷新下一次(内部的代码函数),解释,执行函数但不{{ 1}}也称.success
。
我看到标题为304状态(未修改)但值已修改!!
我尝试禁用缓存,但这并没有解决问题。
我试图给路线提供一个随机值,例如:.error
,但我什么都没得到
问题出在哪里?
答案 0 :(得分:0)
刚跑:
$scope.Refresh();
应该至少运行一次该函数。如果您的代码或服务器路由没有问题。但如果是这种情况,你应该得到一个控制台错误。
对于setInterval
,您应该使用$interval
服务来确保您的代码在角度循环中运行。
此外,根据documentation,您应该在控制器被销毁时明确取消此间隔。
var httpInterval = $interval($scope.Refresh, 100000);
$scope.$on('$destroy', function() {
$interval.cancel(httpInterval);
});
答案 1 :(得分:0)
我只有.success
和.error
的间歇性运气,我想它的一部分是缓存请求。我使用.then
获得了非常一致,成功的结果,如下所示:
$scope.Refresh= function(){
var myGet = $http.get('/get/value');
myGet.then(function(data){
//do success things here
}, function(data){
//do error things here
});
};
除此之外,请遵循@theJoeBiz关于$ interval的建议,你应该没事。