AngularJSを使用してシングルページアプリを開発しています。現在、セットアップが行われているため、5秒ごとにDBが呼び出され、クライアントモデルが更新されます。タイムスタンプで物事をずらしたかった。したがって、DBからすべてをプルするのではなく、最後の呼び出しよりも新しい場合に追加されたすべてをプルします。(帯域幅などを節約します)。しかし、それは私には意味がありません
Angular Controller
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桁の整数を表示します。しかし、私のDBでは、phpのtime関数を使用して10桁のintが表示されます。
time()
これらは矛盾しますか?