我正在使用AngularJS开发单页应用。目前我已经设置好了,所以每隔5秒就会调用一次DB来更新客户端模型。我想用时间戳错开东西。因此它不会从数据库中提取所有内容,而只是提取已经添加的所有内容(如果比上次调用更新)。 (节省带宽等)。 但这对我没有意义
角度控制器
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位数的int。但是在我的数据库中,它显示了一个带有php时间函数的10位数字。
time()
这些冲突吗?
答案 0 :(得分:10)
你应该连接数组本身(现在你将初始数组与哈希对象连接起来):
$scope.news = $scope.news.concat(data['new']);
/* data['new'] because your request returns `{new: []}`, consider changing it to `{news:[]}` */
答案 1 :(得分:2)
除了德米特里的回答,请使用
if ($scope.news == null) {
$scope.news = [];
}
在回调中。
或者,将$scope.news = []
移到回调之外。
$.now()
以毫秒为单位。 Unix时间以秒为单位(date +%s
)(我拒绝承认PHP :P
)