【问题标题】:How to refresh page every 60 seconds without losing existing data in div?如何每 60 秒刷新一次页面而不会丢失 div 中的现有数据?
【发布时间】:2020-08-10 21:22:12
【问题描述】:

我正在实施一个食品状态跟踪器,其中每个订单都有一个订单号。

当页面加载时,我执行 AJAX 调用以获取订单的当前状态。此状态附加到我的div。现在,当我的管理员更改订单状态时,我希望将新状态附加到 div 而不会丢失当前状态。

我试过这样做,但是当我的页面重新加载时,过去的状态会丢失。

下面是部分代码:

<!-- I used this for page reload -->
<meta http-equiv="refresh" content="60"/>

<div id="progressbar" style="border:1px solid white;width:75%;margin:20px auto; display: flex; 
  padding:10px; flex-wrap: wrap;flex-direction: row; justify-content: space-around;">

</div>

<script>
    $(document).ready(function()
    {
        var orderNo = "<?php echo $orderNo; ?>"; 
        alert(orderNo);

        $.ajax({
            url:'action.php', 
            method:'post',
            data:{orderNo,orderNo},
            success:function(response)
            {
                $("#progressbar").append(response);
            }

        });

    });

</script>

然后在我的action.php 文件中:

// ORDER PROGRESS
if (isset($_POST['orderNo']))
{
    $orderNo=$_POST['orderNo'];

    $orderSt="SELECT O_Status from orders WHERE O_No='$orderNo'";

    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $orderRes=$conn->query($orderSt);

     $orderRow=$orderRes->fetch(PDO::FETCH_ASSOC);
     $orderStatus=$orderRow['O_Status'];
     echo $orderStatus;

}

为了重新加载我使用的页面:

<meta http-equiv="refresh" content="60"/>

【问题讨论】:

  • 您需要将所有状态保存在服务器上,并在一次调用中返回所有状态。如果用户想在另一台计算机上查看他的状态怎么办?
  • @mplungjan 是的,他可以,因为我正在跟踪我的用户 ID,即他已经在系统上注册了
  • 为什么不直接再次发送 AJAX 请求而不是重新加载整个页面?
  • @RoryMcCrossan 是的,我想到了。虽然我不知道该怎么做
  • 我在下面为你添加了一个例子

标签: php jquery ajax web


【解决方案1】:

您可以每隔 60 秒进行一次 AJAX 调用,而不是重新加载整个页面。为了实现这一点,将 AJAX 调用放入一个函数中,并在 AJAX 请求的 success 回调中使用 setTimeout() 调用,以给定的延迟再次调用该函数。

jQuery($ => {
  var orderNo = "<?php echo $orderNo; ?>";

  function getData() {
    $.ajax({
      url: 'action.php',
      method: 'post',
      data: {
        orderNo: orderNo
      },
      success: function(response) {
        $("#progressbar").append(response);
        setTimeout(getData, 60000); // repeat in 60 secs, if AJAX was successful
      }
    });
  }

  getData(); // on load
});

请注意,您提供的对象中的键/值对需要用: 分隔,而不是,。我认为这只是问题中的一个错字。

【讨论】:

  • 天才!! :D 它有效!谢谢..但是,我真的不明白逻辑。你能向我解释一下 getData 将如何工作以及我的页面加载后的 setTimeout 吗?
  • 在 document.ready 处理程序中调用getData() 时,一旦页面加载,就会调用该函数。然后在 AJAX 请求的 success 处理程序中,每当 AJAX 请求成功完成时都会调用该处理程序,定义了 setTimeout(),它将再次调用 getData(),但在 60 秒内。这会导致从您正在寻找的服务器中检索数据的无限循环。
  • 好的,谢谢.. 我的状态有重复吗?我该如何解决?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
相关资源
最近更新 更多