angularjs http.get只能在第一次使用

时间:2014-05-19 20:24:14

标签: angularjs http

我的控制器中有一个函数调用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,但我什么都没得到

问题出在哪里?

2 个答案:

答案 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的建议,你应该没事。