是否可以使用setInterval AJAX 自动显示模态和更新数据?CodeIgniter PHP

xoefb8l8  于 2022-12-07  发布在  PHP
关注(0)|答案(1)|浏览(101)

我正在尝试在时间到期时为所有用户创建通知。
我已经创建了一个条件,如果天数、小时数和分钟数变为0(零),则应触发模态和setInterval
然而,它并没有对我当前的代码做任何事情。另一方面,模态没有自动显示,我仍然需要刷新页面,它也没有更新。有没有办法做到这一点?
查看方式:

<form action="<?php echo base_url(); ?>submissions/lock" id="btnexp" method="post">
  <input type="hidden" value="<?php echo $period['period_id']; ?>" name="period_id">
  <?php if($period['duration']!='0000-00-00 00:00:00'): ?>

          <?php 
              date_default_timezone_set('Asia/Manila');
              $datetime = date("Y-m-d H:i:s");

              $date1 = new DateTime($datetime);
              $date2 = new DateTime($period['duration']);
              $interval = $date1->diff($date2);
              $days = $interval->days;
              $hours = $interval->h;
              $min =  $interval->i;
              // echo $interval->format("%Y-%m-%d %H:%i:%s").'<br>';
              // shows the total amount of days (not divided into years, months and days like above)
              $interval->days; 
              $interval->h;
              $interval->i;
              if($days == 0 && $hours == 0 && $min == 0){ 
          ?>

          <script>
            $(function(){
                    
                    //function
                    setInterval(function(){
                        $.ajax({
                            type: 'POST',
                            url: '<?php echo base_url() ?>submissions/lock',
                            async:false,
                            cache: false,
                            success: function(data){
                              if (data == 0){
                              $('#myModal').modal('show');   
                              }                       
                            },
                            error: function(){
                                alert('Could not get Data from Database');
                            }
                        });
                    }, 1000);                
            });
          </script> 

                  
          <?php  } ?>
  <?php endif; ?>
</form>

控制器:提交/锁定

public function lock()
    {

        $this->submission_model->lock();

    }
vawmfj5a

vawmfj5a1#

您应该使用javascript来完成此操作。
setInterval在javascript中,它是每毫秒运行一次,但它只适用于javascript代码,而不是php。
PHP是服务器端,JS是客户端。
也许它会为你工作。使用momentjs来获得时差。
并使用setInterval函数设置获取每秒运行的时间差
如果条件为真,则运行 AJAX 并打开模态。

<!-- Moment JS Init -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js" integrity="sha512-Dz4zO7p6MrF+VcOD6PUbA08hK1rv0hDv/wGuxSUjImaUYxRyK2gLC6eQWVqyDN9IM1X/kUA8zkykJS/gEVOd3w==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

<?php if ($period['duration'] != '0000-00-00 00:00:00') : ?>
    <script>
        $(function() {
            //function
            setInterval(function() {
                var currentDate = moment();
                var duration = moment(`<?= $period['duration'] ?>`);
                var diffDays = currentDate.diff(duration, 'days')
                var diffHours = currentDate.diff(duration, 'hours')
                var diffMinutes = currentDate.diff(duration, 'minutes')

                if (diffDays <= 0 && diffHours <= 0 && diffMinutes <= 0) {
                    $.ajax({
                        type: 'POST',
                        url: `<?= base_url('submissions/lock') ?>`,
                        async: false,
                        cache: false,
                        success: function(data) {
                            $('#myModal').modal('show');
                        },
                        error: function() {
                            alert('Could not get Data from Database');
                        }
                    });
                }
            }, 1000);
        });
    </script>
<?php endif; ?>

<form action="<?= base_url('submissions/lock'); ?>" id="btnexp" method="post">
    <input type="hidden" value="<?php echo $period['period_id']; ?>" name="period_id">
</form>

相关问题