** Angular 1.X ** 大家好!我需要帮助使这个 $http.get 函数异步,正如您从代码中看到的那样,我当前的临时解决方案是将 displayData 范围设置为 setInterval。这显然不是一个有效的解决方案,因为它占用了太多的 CPU、太多的用户数据,并且可能导致 UI 上出现一些闪烁。我希望在更新数据库时更新数组。 请不要推荐我切换到其他框架。 谢谢
$scope.displayData = function() {
$http.get("read.php").success(function(data) {
$scope.links = data;
});
}
setInterval(function(){$scope.displayData();}, 500);
这是我的 PHP(“read.php”)
<?php
include("../php/connect.php");
session_start();
$output = array();
$team_id = $_SESSION['team_id'];
$sql = "SELECT record_id, user_id, link, note, timestamp FROM
link_bank WHERE team_id = '$team_id' AND status = 'valid'";
$result = mysqli_query($connect, $sql);
if (mysqli_num_rows($result) > 0) {
while ($row = mysqli_fetch_array($result)) {
$output[] = $row;
}
echo json_encode($output);
}
?>
最佳答案
$http.get
已经是异步的了!异步函数就是在未来某个未知时间完成运行的任何函数。
你真正想做的是long polling .这是您定期向服务器发送请求以获取最新数据的地方,这不是一个好主意的原因有很多(包括您提到的闪烁和高 CPU 使用率)。
我知道您说过您不想让任何人推荐其他框架,但是尝试编写您自己的框架以在数据库更新时通知客户端是一项艰巨的任务。我们无法为您提供仅通过 PHP 和 Javascript 即可提供该功能的一小段代码。
但是,您可以尝试使用 WebSockets 编写您自己的代码。这是按照您建议的方式进行服务器到客户端通信的最直接、非框架的方式。
关于php - 如何使用 $http.get 有效地轮询 mySQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47581427/