Не могу опросить SQL в Angular

0

Я проверил несколько сообщений, но я не мог заставить его работать. Здесь, где я пришел так далеко:

myApp.controller('customersCtrl', function($scope, $http, $timeout) {
  var polling = function() {
    var value = $http({
      method: 'GET',
      url: 'poll.php'
    });

    value.success(function(data, status, headers, config) {
      $scope.records = data;
    });

    $timeout(function() {
      polling();
    }, 3000);
  };
  polling();
});
poll.php:
<?php 
$db = new mysqli('fdb4.freehostingeu.com', '1584066_users', '*******', '1584066_users');

if($db->connect_errno > 0){
    die('Unable to connect to database [' . $db->connect_error . ']');
}
$db->set_charset("utf8");
if(!$result = $db->query("SELECT * FROM mtp ORDER BY date DESC")){
    die('There was an error running the query [' . $db->error . ']');
} 

while($row = mysqli_fetch_assoc($result)){
    $row["date"] = strtotime($row["date"]) * 1000;
    $records[] = $row;
}
print( json_encode($records));
$result->free();
$db->close();
?>

Он работает на первом poll(); но не обновляется, если таблица SQL обновляется снаружи.

EDIT: Я попробовал это случайно, и каким-то образом метод POST работал в моем случае.

Теги:

2 ответа

0
Лучший ответ

Когда вы используете $ interval или $ timeout, тогда когда-то вам нужно использовать $ apply, попробуйте использовать $ apply, он будет работать.

Вот ваш ответ

myApp.controller('customersCtrl', function($scope, $http, $timeout) {
  var polling = function() {
    var value = $http({
      method: 'GET',
      url: 'poll.php'
    });

    value.success(function(data, status, headers, config) {
      $scope.records = data;
      $scope.$apply(); //Use $apply to start digest process manually.
       $timeout(function() {
         polling();
       }, 3000);
    });

  };
});
  • 0
    Да, похоже, это должно работать. Первый опрос (); работает как обычно, интервал тоже работает ... но не влияет на таблицу. Возможно я должен позволить вещанию живого обновления идти.
  • 0
    используйте $ scope. $ apply (); это проблема с дайджестом.
Показать ещё 3 комментария
-2

Вам нужно $interval вместо $timeout.

$ timeout только ждать 3 секунды и совершать вызов, а затем останавливается. С интервалом $ вы можете вместо этого подождать 3 секунды, вызвать опрос, подождать 3 секунды, вызвать опрос и т.д....

myApp.controller('customersCtrl', function($scope, $http, $interval) {
  var polling = function() {
    var value = $http({
      method: 'GET',
      url: 'poll.php'
    });

    value.success(function(data, status, headers, config) {
      $scope.records = data;
    });

    $interval(function() {
      polling();
    }, 3000);
  };
  polling();
});
  • 0
    Не работает на самом деле.
  • 0
    Можете ли вы объяснить, "не работал"?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню