2011-01-19 24 views
10

Quiero una función para configurar un Ajax y un temporizador de recarga. El siguiente código no destruye el temporizador de llamadas de función anterior, por lo que cada vez que lo invoco obtengo otro temporizador. ¿Cómo puedo destruir el temporizador anterior?Destruye el setInterval anterior

function initNowPlayingMeta(station) { 
    $('#cancion').children().remove(); 
    $('#cancion').load('sonando.php?emisora=' + station); 
    var prevNowPlaying = setInterval(function() { 
     $('#cancion').load('sonando.php?emisora=' + station); 
    }, 5000); 
} 

Respuesta

24

necesita almacenar su referencia temporizador en algún lugar fuera del ámbito local (esto significa, esencialmente, declarando con var fuera de la función). Entonces, claro que con clearInterval:

var prevNowPlaying = null; 

function initNowPlayingMeta(station) { 
    if(prevNowPlaying) { 
     clearInterval(prevNowPlaying); 
    } 
    $('#cancion').children().remove(); 
    $('#cancion').load('sonando.php?emisora=' + station); 
    prevNowPlaying = setInterval(function() { 
     $('#cancion').load('sonando.php?emisora=' + station); 
    }, 5000); 
} 
+0

¡Gracias! que funcionó –

+0

Me alegro de ayudar :) –

+0

Tenga en cuenta que (al menos en teoría de acuerdo con HTML5) setInterval podría devolver cero, por lo que debe comprobar prevNowPlaying tiene el valor inicial y no solo que sea veraz. – gsnedders

4

clearInterval

clearInterval(prevNowPlaying);

también tendrá que hacer el prevNowPlaying de las llamadas anteriores en el alcance dondequiera que usted intenta cancelar

+0

Esto no funcionará a menos que su referencia esté fuera del alcance local de la función –

+0

sí, por eso agregué esta declaración justo antes de comentar ... – tobyodavies

+0

También pensé que era obvio, pero quizás no ... – tobyodavies

0

Es necesario explícitamente limpia el temporizador

var prevNowPlaying; 
function initNowPlayingMeta(station) { 
    $('#cancion').children().remove(); 
    $('#cancion').load('sonando.php?emisora=' + station); 
    if (prevNowPlaying === undefined) clearInterval(prevNowPlaying); 
    prevNowPlaying = setInterval(function() { 
     $('#cancion').load('sonando.php?emisora=' + station); 
    }, 5000); 
} 
+0

Creo que 'if (prevNowPlaying === 0)' fallará ya que una var no asignada es 'undefined' o' null', no '0' –

+0

Eh, olvida lo que dije. Yo malinterpreté tu código. Todavía no entiendo por qué quieres una comparación estricta con '0' sin embargo. setInterval no garantiza devolver '0' ¿verdad? –

+0

Bleh, no debe estar definido. No tengo idea de por qué escribí 0 allí. – gsnedders