Angular,Run函数on interval,timeout

时间:2016-02-27 17:19:37

标签: php angularjs

我编写了以下控制器,它从我的数据库中获取信息并显示在我的应用程序中:

控制器:

.controller('activityCtrl', function($scope, $http, $interval) {
    $http.get("user.php")
    .then(function (response) {$scope.names = response.data.records;});
})

user.php的

<?php
//DB stuff goes here
$outp = "";
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($outp != "") {$outp .= ",";}
    $outp .= '{"Regid":"'  . $rs["Regid"] . '",';
    $outp .= '"Fname":"'   . $rs["fname"]        . '",';
    $outp .= '"Lname":"'   . $rs["lname"]        . '",';
    $outp .= '"activity":"'   . $rs["activity"]        . '",';
    $outp .= '"ID":"'. $rs["id"]     . '"}'; 
}
$outp ='{"records":['.$outp.']}';
$conn->close();
//echo($outp);
?>

现在我试图修改控制器,使其运行getData函数并以预定义的间隔更新视图,并且我在将更新的必要部分与我已经工作的内容相结合时遇到了一些麻烦。这是控制器,因为它已被修改:

.controller('activityCtrl', function($scope, $http, $timeout) {
$scope.getData = function(){
$http.get("user.php")
.success(function(data,status,headers,config){
//The next line needs to be modified to work with the new code
//.then(function (response) {$scope.names = response.data.records;});
console.log("data fetched");
        });
    };
$scope.intervalFunction = function(){
    $timeout(function(){
        $scope.getData();
        $scope.intervalFunction();
    }, 1000)
};
$scope.intervalFunction(); 
});

目前我已经运行了console.log进行测试,一切正常。我将旧版代码注释掉了;这是我需要重写的行,以便根据需要显示数据。非常感谢任何帮助。

间隔工作已经开始;我不知道如何重写.success函数,因此它显示$ http。

的结果

4 个答案:

答案 0 :(得分:0)

对不起你的问题对我很不清楚,就像你想要达到的目标一样。

如果您想在特定时间段后重复运行代码,那么您可以使用$ interval服务。你能更明确地了解你想要达到的目标以及问题出在哪里?

答案 1 :(得分:0)

使用$interval代替$timeout

    $interval(function(){
        $scope.getData();
    }, 1000);

查看更多:setTimeout or setInterval?

答案 2 :(得分:0)

虽然技术上不是你在 user.php 做什么的答案? 我认为您正在尝试创建JSON字符串,但我对您的方法提出质疑。

<?php
  while($row = $result->fetch_array(MYSQLI_ASSOC)) {
    $data[] = $row; // or just use a fetch_all?
  }

  echo json_encode($data);
?>

答案 3 :(得分:0)

我通过使用$ scope和setInterval修复了这个问题。如果有人需要参考,这是新的控制器:

.controller('activityCtrl', function($scope, $http) {
    $scope.value = 0;
    setInterval(function(){
   $http.get("user.php")
   .then(function (response) {$scope.names = response.data.records;});
    }, 1000);
});