2012-02-07 4 views
6

Lo que estoy tratando de lograr es que inicialmente los datos se carguen y luego se actualicen cada diez minutos con la misma función.Usar setInterval en JavaScript sin usar una función anónima en línea

consideran este código:

var updateNamespace = (function() { 
    var object = '#updates', 
    load = 'loader'; 

    return { 
     update: function() { 
      $(object).addClass(load).load('update.php', function(reponse, status, xhr) { 
       if (status == 'error') { 
        $(this).html('<li>Sorry but there was an error in loading the news &amp; updates.</li>'); 
       } 
       $(this).removeClass(load); 
      }); 
     } 
    } 
})(); 

setInterval(updateNamespace.update(), 600000); 

consigo este error:

useless setInterval call (missing quotes around argument?) 

¿Cómo puedo solucionar este problema?

¿Cuál es una forma mejor y más elegante de escribir esto o usar la función setInterval?

Gracias.

Respuesta

14

Es necesario utilizar:

setInterval(updateNamespace.update, 600000); 

(. Tenga en cuenta que el operador retira la invocación())

su código, tal como está escrito, en realidad invocar updateNamespace.update cuando se llama a setInterval. Por lo tanto,

setInterval(updateNamespace.update(), 600000); 

evalúa a

setInterval(undefined, 600000); 

Se debe pasar setInterval una referencia a su función, no el resultado de su invocación.

+0

¡Buena respuesta! En mi caso, tuve que enviar parámetros a la función llamada por setInterval. Entonces, los puse en un alcance mayor (no pensamiento global). ¡Funciona como un encanto! –

-6

tratar setInterval('updateNamespace.update()', 600000);

Nota las comillas alrededor de la llamada de función

0

Por alguna razón JavaScript quiere ver comillas en el método de su vocación. Como si fuera una cadena. No estoy seguro de por qué funciona así. Matt H. dijo que si pasa una referencia que solucionará el problema. Pero no funcionará si necesita pasar una discusión. Así que no sé si tal vez JavaScript simplemente guarda el método como una cadena y luego se convierte para volver a la normalidad cuando se usa.

Cuestiones relacionadas