我正在使用 AngularJS 开发单页应用程序。目前我已经进行了设置,因此每 5 秒调用一次数据库以更新客户端模型。我想用时间戳错开事情。因此,它不会从数据库中提取所有内容,而只会提取比上次调用更新时添加的所有内容。(节省带宽等)。但这对我来说没有意义
角度控制器
var timestamp = '';
function NewsListCtrl($scope, $http, $timeout) {
$scope.news = [];
$scope.newsRequest = function() {
$http.get('/ci/index.php/news/get_news_ajax/' + timestamp).success(function(data) {
timestamp = $.now();
$scope.news = $scope.news.concat(data);
});
};
$scope.newsRequest();
setInterval(function(){
$scope.$apply(function(){
$scope.newsRequest();
});
}, 5000);
}
上面的代码不会在页面上打印任何内容。第一个请求显示对象中的数据。但后续请求(带有时间戳)显示空对象。所以至少第一个请求应该打印出来。
初始请求中的数据样本
{"new":[{"id":"181","title":"not gonna work","slug":"not-gonna-work","time":"1363374669","text":"asdfs","deletetime":null}]}
当我删除
$scope.news = [];
然后我得到返回的错误,说它是未定义的。
任何人都能够阐明实现这一目标的正确方法吗?
编辑:
根据答案,我已将代码更新为:
var timestamp = '';
function NewsListCtrl($scope, $http, $timeout) {
$scope.news = [];
$scope.newsRequest = function(){
$http.get('/ci/index.php/news/get_news_ajax/' + timestamp).success(function(data) {
timestamp = $.now();
$scope.news = $scope.news.concat(data.new);
});
};
$scope.newsRequest();
setInterval(function(){
$scope.$apply(function(){
$scope.newsRequest();
});
}, 5000);
所以现在数据仍然显示在页面上。但它实际上不再从模型中填充新数据。不确定这是否是逻辑问题。我在用着
timestamp = $.now();
设置当前时间。它显示一个 13 位整数。但是在我的数据库中,它显示了一个带有 php 时间函数的 10 位整数。
time()
这些冲突吗?