使用$ interval在AngularJS中每秒触发一次AJAX请求

时间:2017-03-02 14:48:01

标签: javascript html angularjs setinterval

interval函数在我单击的最后一个元素中继续循环。我想要发生的是当我点击一个新元素时取消最后一个间隔,然后当我点击它时重新开始。我点击ng-repeat中的每个项目。

这是我的代码。

$scope.onClickTab= function(x,tkid, sid, $event){
      var vtpostdata = 'TokenId=' + tkid +
                                ',SessionId=' + sid +
                                ',ChatMessageCount=' + 0 +
                                ',retrytimes=' + 10 +
                                ',delayms=' + 100;
  $interval(function() {
      $http.jsonp(ServiceDomainSite + 'myApi' + vtpostdata + '?callback=JSON_CALLBACK&t=' 
                                    + new Date().getTime())
            .success(function (data) {
              var resultObject = angular.fromJson(data.Rows);
              $scope.Chats = resultObject;    
            });
  }, 1000);
};

2 个答案:

答案 0 :(得分:3)

$interval.cancel()很好很好。我还删除了var vtpostdata,因为它未在代码中使用,而是再次发出$http请求。因此,此时无需创建var。另请查看AngularJS $interval的文档以了解有关$ interval处理的更多信息。

var myInterval = null;

$scope.onClickTab = function(x,tkid, sid, $event){

    //cancel current interval
    if (myInterval !== null) {
        $interval.cancel(myInterval);
    }

    myInterval = $interval(function() {
        $http.jsonp(ServiceDomainSite + 'myApiTokenId=' + tkid +
        ',SessionId=' + sid +
        ',ChatMessageCount=' + 0 +
        ',retrytimes=' + 10 +
        ',delayms=' + 100 + '?callback=JSON_CALLBACK&t='
        + new Date().getTime()).success(function (data) {
            var resultObject = angular.fromJson(data.Rows);
            $scope.Chats = resultObject;
        });
    }, 1000);
};

答案 1 :(得分:1)

$interval服务返回一个可以随时取消的承诺,以便您可以按照官方文档使用它们。对于Eg。

var stopTime = $interval(function(){}, 1000);

并取消使用

$interval.cancel(stopTime);

https://docs.angularjs.org/api/ng/service/ $间隔