目前,我正在构建一个队列系统,我有如下的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>
答案 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);