我想在数据发生变化时更改setTimeout值

时间:2017-06-20 07:37:01

标签: javascript php ajax

目前,我正在构建一个队列系统,我有如下的ajax函数:

<script type="text/javascript" >
(function worker() {
  $.ajax({
    url: 'http://localhost/queue/queue_list.php', 
    success: function(data) {
      $('#result').html(data);
    },
    complete: function() {
      // Schedule the next request when the current one's complete
     setTimeout(worker, 3000);
    }
  });
})();
<script>
<div id="result"></div>

在该功能中,系统将每隔3秒刷新一次数据,以便在数据发生变化时更新表视图。

我想要的是,当queue_list.php上有数据更改时,setTimeout将更改为20秒(以播放语音呼叫),但如果没有数据更改,则setTimeout值将不会更改。 如何更改setTimeout值?

queue_list.php

<?php
function nomornya($loket,$huruf){
include"database.php";
    $sqlnyah="select count(id) as ceknya from panggilan_antrian where loket='$loket' and huruf='$huruf'";
    $sqlnyah2="select nomor from panggilan_antrian where loket='$loket' and huruf='$huruf'";
    $querynyah=mysqli_query($sqlnyah);
    $angkan=mysqli_fetch_assoc($querynyah);
    $angkany=$angkan[ceknya];
    if($angkany!=0){
        $querynyah2=mysqli_query($sqlnyah2);
        $angkan2=mysqli_fetch_assoc($querynyah2);
        $angkanya=$angkan2[nomor];
    }else{
        $angkanya="0";
    }
    echo $angkanya;

}
?>
<style>
table,tr,td{
    font-size:1.7em;
}
</style>
<table style="width:100%;text-align:center;">
    <tr style="background:#000000; color:#ffffff;">
        <td>COUNTER</td>
        <td>NOMOR</td>
    </tr>
    <tr style="background:#b1c2f3">
        <td>1</td>
        <td><?php nomornya(1,null); ?></td>
    </tr>
    <tr style="background:#d2f3b1">
        <td>2A</td>
        <td><?php nomornya(2,A); ?></td>
    </tr>
    <tr style="background:#b1c2f3">
        <td>2B</td>
        <td><?php nomornya(2,B); ?></td>
    </tr>
    <tr style="background:#d2f3b1">
        <td>2C</td>
        <td><?php nomornya(2,C); ?></td>
    </tr>
    <tr style="background:#b1c2f3">
        <td>3</td>
        <td><?php nomornya(3,null); ?></td>
    </tr>
    <tr style="background:#d2f3b1">
        <td>4</td>
        <td><?php nomornya(4,null); ?></td>
    </tr>
</table>

4 个答案:

答案 0 :(得分:3)

您可以将超时声明为变量并清除它。

setTimeout(worker, 3000);

会变成

var workerTimeout = setTimeout(worker, 3000);

当你需要清除它时

ClearTimeout (workerTimeout);

然后再将其设置为新值。

workerTimeout = setTimeout (worker, 20000);

答案 1 :(得分:0)

setTimeout返回timeoutID,您可以使用此ID取消已设置的超时。

但我不建议你在这里使用超时,尝试setInterval。 这是它的样子

In [38]: a
Out[38]: array([ 4,  5,  6,  7,  8,  9, 10, 11, 12, 13])

In [39]: b
Out[39]: [3, 4, 5, 9]

In [40]: a[b]
Out[40]: array([ 7,  8,  9, 13])

In [41]: np.delete(a, b)
Out[41]: array([ 4,  5,  6, 10, 11, 12])

答案 2 :(得分:0)

这很简单:将超时值分配给变量,并在需要时更改超时变量。像这样:

(function worker() {
  $.ajax({
    url: 'http://localhost/queue/queue_list.php', 
    success: function(data) {
      $('#result').html(data);
    },
    complete: function() {
      var timeout = 3000;
      //change in data, since timeout was already set on previous data change. Hence, update timeout value too and clear previous timeout
      if(typeof timer!='undefined') {
       clearTimeout(timer);
       timeout = 20*1000;
      }
      // Schedule the next request when the current one's complete
     var timer = setTimeout(worker, timeout);
    }
  });
})();

答案 3 :(得分:0)

setTimeout 是一个本机JavaScript函数,它在指定的延迟(毫秒)后调用函数或执行代码

setTimeout(function(){

worker() // call your function here


},3000);