检查数据库是否有更改,然后重新加载页面

时间:2017-10-22 21:19:33

标签: javascript php jquery

我正在开发一个脚本,我需要它来检查数据库中的更改。

每次执行edit.php时,它都会生成一个时间戳并将其保存在数据库中。如果在数据库中保存了较新的时间戳,则需要刷新edit.php页面。

因此,我创建了一个页面,显示了DB(checkupdates.php)上保存的当前时间戳,并使JS脚本检查页面并比较时间戳。如果数据库更新,则需要刷新页面。

我没有javascript的概念,到目前为止,我的页面对当前脚本没有响应。

这是我到目前为止所得到的:

edit.php

<?php 
$date = new DateTime();
$utime = $date->getTimestamp(); //GET TIMESTAMP ON PAGE LOAD

updatetimestampondb($id, $utime); //UPDATE DB WITH CURRENT TIMESTAMP
?>


<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

<script type="text/javascript">

var updatetime = "<?php echo $utime; ?>"; //The timestamp saved in the DB when the page is executed

function checkUpdate() {
    $.ajax({
      url: 'checkupdates.php?id=$id',
      timeout: 2000,
      success: function(data) {
        if (currentTS < updatetime) {
            alert('The page will be reaload');
            location.reload();
        }
    });
}

setInterval(checkUpdate, 5000);

</script>

checkupdates.php

<?php
(...) //Check DB Script for actual timestamp saved
echo "<script>var currentTS = ".$sheet->utime.";</script>";
(...)
?>

谢谢!

4 个答案:

答案 0 :(得分:2)

你最好在ajax中发送一个json响应,因为js代码不能正常工作,请尝试以下方法:

 $response = ["currentTS" => $sheet->utime];
 echo  json_encode($response); 

编写你的ajax如下(如果$id是php var,则将其写为<?=$id?>):

function checkUpdate() {
    $.ajax({
      url: 'checkupdates.php?id=$id',
      timeout: 2000,
      dataType: 'json',
      success: function(data) {
        if (data.currentTS < updatetime) {
            alert('The page will be reaload');
            location.reload();
        }
    });

答案 1 :(得分:1)

this.route.paramMap.subscribe(params => 
    this._PersonService.getPerson(+params.get('id'))
        .subscribe((person) => this.person = person, () => {  //do something on error}))

无法在Ajax请求中使用。你需要发回JSON:

echo "<script>var currentTS = ".$sheet->utime.";</script>";

然后在AJAX成功中添加echo '{"currentTS" : "'.$sheet->utime.'"}';

dataType: 'json'

以上将解决您回来的数据问题。但我确实想知道为什么这么详细。您不能每5秒向服务器发出一次请求,然后动态更新页面上的组件吗?

答案 2 :(得分:1)

您不能直接通过AJAX在HTML脚本中回显javascript。 你能做的是以下几点。

checkupdates.php

<?php 
   // ...
   echo $sheet->utime;

然后使用变量data

而不是变量currentTS

答案 3 :(得分:1)

您可以使用mysql触发器

CREATE TRIGGER trigger_name AFTER UPDATE ON table_name FOR EACH ROW

BEGIN

SET @exec_var = sys_exec(CONCAT('node /path/to/node-js-script.js ', NEW.id));

END;

并捕获特定表被操作的非常精确的时刻,并在您想要的站点上的任何位置发出事件。

然后你不需要像:

setInterval(checkUpdate, 5000);

...在每个5秒上循环并发送不需要的请求