2017-06-20 2 views
1

Für ist, ich bin ein Queue-System bauen, i die Ajax-Funktion wie die folgende haben:i wan den SetTimeout Wert zu ändern, wenn Datenänderung nun

<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> 

In der Funktion System wird aktualisiert die Daten alle 3 Sekunden, um die Tabellenansicht zu aktualisieren, wenn sich Daten ändern.

Was ich will ist, wenn sich Daten ändern auf queue_list.php, setTimeout wird auf 20 Sekunden (um Sprachanruf zu spielen), aber wenn keine Daten ändern, wird der setTimeout Wert nicht ändern. Wie kann ich den setTimeout Wert ändern?

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> 

Antwort

0

setTimeout kehrt timeoutID, können Sie diese ID verwenden bereits gesetzt Timeout abzubrechen.

Aber ich würde nicht vorschlagen, dass Sie Timeouts hier verwenden, versuchen Sie setInterval. Hier ist, wie es

var updateBlocked = false; 
function worker() { 
    if (updateBlocked) return; 
    // your code to fetch new info 
} 

setInterval(worker, 3000); 

function onSomeEvent() { 
    updateBlocked = true; 
    setTimeout(function(){updateBlocked = false;}, 20000); 
} 
3

Sie können aussehen könnte das Timeout als Variable deklarieren und löschen sie.

setTimeout(worker, 3000); 

würde

var workerTimeout = setTimeout(worker, 3000); 

werden, wenn Sie es Sie

ClearTimeout (workerTimeout); 

und setzen Sie ihn löschen müssen dann wieder auf den neuen Wert.

workerTimeout = setTimeout (worker, 20000); 
+0

ich weiß nicht, wie es zu benutzen , wie kann ich überprüfen, ob Daten aktualisiert und dann neue Timeout gesetzt? – Gumilar

0

Es ist einfach wie folgt: Weisen Sie den Zeitüberschreitungswert einer Variablen zu und ändern Sie die Zeitlimitvariable, wann immer es benötigt wird. Etwas wie folgt aus:

(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); 
    } 
    }); 
})(); 
0

SetTimeout ist eine native JavaScript-Funktion, die eine Funktion aufruft oder ausführt, einen Code nach einer bestimmten Verzögerung (Millisekunden)

setTimeout(function(){ 

worker() // call your function here 


},3000); 
Verwandte Themen