【问题标题】:Refresh page if there is change in database如果数据库有变化,刷新页面
【发布时间】:2020-01-06 18:36:21
【问题描述】:

如果使用 Ajax 和 PHP 的数据库中的 orderStatus 发生变化,我正在尝试刷新我的页面。我将当前 orderStatus 设置为预定义数据,然后使用 Ajax 从数据库中获取当前 orderStatus,最后比较它们是否不相同。如果它们不一样,我想刷新页面。

PHP (autorefresh.php)

<?php

$orderId = $_POST["orderId"];

$query = "SELECT * FROM orderinhomeonlinecall WHERE orderId='$orderId'";
$result = mysqli_query($db, $query);

  while($row = mysqli_fetch_array($result))
  {
      $orderStatus = $row['orderStatus'];

      $data = array(
        'orderStatus'   => $orderStatus
       );
       echo json_encode($data);
}
?>

Javascript

<script type="text/javascript" >
var predefined_val = '<?php echo $orderStatus; ?>';// your predefined value.
$.document(ready(function(){
    setInterval(function(){
        $.ajax({
            type:"POST",
            url:"autorefresh.php", //put relative url here, script which will return php
            data:{orderId: <?php echo $orderId; ?>}, // if any you would like to post any data
            success:function(response){
                var data = response; // response data from your php script
                if(predefined_val !== data){
                    window.location.href=window.location.href;
                }
            }
        });                     
    },5000);// function will run every 5 seconds
}));

【问题讨论】:

  • 对数据库的更改不能触发对页面的更改。您必须定期使用 AJAX 查询数据库,以将当前状态与新状态进行比较以进行更改。
  • 您对 SQL 注入持开放态度。您应该参数化您的查询。
  • 我会写一些 AJAX 并让它每 5 秒左右运行一次以获取更新。
  • 使用 websockets 而不是轮询。后者是一种反模式,因为它根本无法扩展。
  • 谢谢大家,user3783243 和 Dharman,我稍后会处理 SQL 注入方面的问题。

标签: javascript php jquery mysql ajax


【解决方案1】:

下面的代码应该可以工作,需要提及dataType:"json" 否则使用JSON.stringify(data) 来解析响应

<script type="text/javascript">
var predefined_val = '<?php echo $orderStatus; ?>';// your predefined value.
$(document).ready(function () {
    setInterval(function () {
        $.ajax({
            type: "POST",
            url: "autorefresh.php", //put relative url here, script which will return php
            data: {orderId: <?php echo $orderId; ?>}, // if any you would like to post any data
            dataType: "json",
            success: function (response) {
                var data = response; // response data from your php script
                if (predefined_val !== data.orderStatus) {
                    window.location.href = window.location.href;
                }
            }
        });
    }, 5000);// function will run every 5 seconds
});
</script>

【讨论】:

  • 感谢 Ramasamy 的帮助,但是我已经尝试使用您的代码,但仍然无法重新加载页面。
【解决方案2】:

我已经通过创建两个文件(autorefresh.php,index.php)并使用表测试数据库来测试它,它对我有用。我认为下面的代码会有所帮助,如果没有请分享您的代码,我会检查并修复它。

autorefresh.php

// Create connection
$db = new mysqli("localhost", "root", "","test");

$orderId = $_POST["orderId"];

$query = "SELECT * FROM orderinhomeonlinecall WHERE orderId='$orderId'";

$result = mysqli_query($db, $query);

  while($row = mysqli_fetch_array($result))
  {
      $orderStatus = $row['orderStatus'];

      $data = array(
        'orderStatus'   => $orderStatus
       );
       echo json_encode($data);
}
?>

index.php

<?php
$orderStatus ='pending';
$orderId =1;
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script type="text/javascript">
var predefined_val = '<?php echo $orderStatus; ?>';// your predefined value.
$(document).ready(function () {
    setInterval(function () {
        $.ajax({
            type: "POST",
            url: "autorefresh.php", //put relative url here, script which will return php
            data: {orderId: <?php echo $orderId; ?>}, // if any you would like to post any data
            dataType: "json",
            success: function (response) {
                var data = response; // response data from your php script
                if (predefined_val !== data.orderStatus) {
                    window.location.href = window.location.href;
                }
            }
        });
    }, 5000);// function will run every 5 seconds
});
</script>

【讨论】:

  • 它仍然无法正常工作。我试图检查页面并注意到 ajax 请求在页面上不起作用。我在一个单独的文件夹中尝试过,结果是一样的。我有另一个正在运行的 ajax 请求,当我检查页面时可以看到它。请问如何发布我的代码?评论框不允许我。
  • 嗨,Ramasamy,我能够通过修复页面上的错误来使其正常工作。我在页面顶部有一个没有调用正确目录的会话文件。但是还有一个问题,即使没有数据库更新,页面也会不断刷新。我检查了 autorefresh.php 文件,它返回了当前的 orderstatus 值。为什么即使没有数据库更新,页面也每 5 分钟刷新一次?
  • 感谢大家,感谢拉马萨米。我终于通过将 if (predefined_val !== data.dbstatus) 更改为 if (predefined_val != data.dbstatus) 来停止不断重新加载。现在工作正常。你的答案就是这个小小的改变的正确答案。谢谢!
  • 你能用git分享你的代码吗,或者驱动器,我会检查它
猜你喜欢
  • 2012-06-02
  • 1970-01-01
  • 2011-06-05
  • 1970-01-01
  • 2016-03-03
  • 2019-12-18
  • 1970-01-01
  • 1970-01-01
  • 2014-07-14
相关资源
最近更新 更多