ciao, ho applicazione che deve fare il seguente:
1) ogni 1000ms chiamata ajax per eseguire query in db
2) se ajax ritorna un risultato, la funziona countdown() viene chiamata
3) ognivolta che la funzione countdown viene chiamata viene cancellato un eventuale timer pre-esistente e un nuovo timer viene fatto partire
4) le chiamate ajax (punto 1) devono continuare in background indipendentemente dal timer
Al momento il problema è che quando resetto il timer per il countdown (dentro la funziona countdown()) il setInterval iniziale (punto 1) si blocca. A me serve che continui invece a funzionare indipendentemente dal'altro countdown timer.
Grazie!
Questo è il codice. ho commentato la chiamata ajax per semplificare
codice:
$(document).ready(function() {
$('#myLog').hide();
//questo deve essere eseguito continuamente, per sempre
setInterval(function(){setTimer(0);} , 1000);
});
function setTimer(){
canvas = document.getElementById("myCanvas");
log = document.getElementById("myLog");
//chiamata per esempio
countdown(5, 0);
//$.ajax ({
// url: "ajax.php",
// success: function( result ) {
// countdown(result, 0);
// }
//});
}
function countdown(minutes, seconds) {
canvas.style.color = "black";
canvas.innerHTML = "00:00";
//reset countdown. funziona ma influisce anche su setInterval iniziale
var id = window.setTimeout(null,0);
while (id--)
window.clearTimeout(id);
//da qui in poi funziona tutto ok
if(minutes == "OFF"){
canvas.style.color = "#383838";
canvas.innerHTML = "OFF";
return;
}
var endTime, hours, mins, msLeft, time;
function twoDigits( n )
{
return (n <= 9 ? "0" + n : n);
}
function updateTimer()
{
canvas.style.color = "black";
canvas.innerHTML = "00:00"; //clear canvas
msLeft = endTime - (+new Date);
if ( msLeft < 1000 )
flashyText();
else {
canvas.style.color = "white";
time = new Date( msLeft );
hours = time.getUTCHours();
mins = time.getUTCMinutes();
canvas.innerHTML = (hours ? hours + ':' + twoDigits( mins ) : mins) + ':' + twoDigits( time.getUTCSeconds());
setTimeout( updateTimer, time.getUTCMilliseconds() + 500 );
}
}
endTime = (+new Date) + 1000 * (60*minutes + seconds) + 500;
updateTimer();
}
function flashyText() {
var count = 1000000,
timer = setInterval(function() {
count--;
if( count%2 == 1) {
canvas.style.color = "red";
canvas.innerHTML = "00:00"
}
else {
canvas.style.color = "black";
canvas.innerHTML = "00:00";
}
if( count == 0) clearInterval(timer);
},1000);
}