2012-01-04 19 views
6

Quiero consultar periódicamente una secuencia de comandos PHP para nuevos mensajes. Para hacerlo, estoy usando la función setInterval() y AJAX.setInterval() única función en ejecución una vez

$(document).ready(function(){ 

    var queryInterval = 1000; /* How fast we query for new messages */ 

    setInterval(getMessages(), queryInterval); 

    function getMessages() { 
     console.log("tick"); 
    } 

}); 

Sin embargo, cuando miro la consola de Javascript, solo estoy viendo "tic" una vez. Me he asegurado de que la consola no ignore más registros de las mismas cadenas, por lo que si el código funcionaba correctamente, debería mostrar "tic" en la consola cada segundo.

¿Alguien sabe qué podría salir mal aquí?

+2

había otra pregunta solo como esto hace una hora. –

+0

getMessages() deberían ser getMessages – georg

+1

@ 32bitkid: Las preguntas sobre 'setTimout' y' setInterval' son bastante comunes. – Ivan

Respuesta

23

Cambio:

setInterval(getMessages(), queryInterval); 

Para:

setInterval(getMessages, queryInterval); 
+0

perfecto .... !!!! –

+0

@qwertymk pero quiero pasar un argumento a esa función ¿qué hago this.intervall = setInterval (window.External (this), intervally); PLease HELP –

+2

@JamilHneini también: 'setInterval (function() {getMessages (arg)}, queryInterval);' – qwertymk

1

Retire los () después getMessage

1

Este llamadasgetMessages, no lo programa. Eliminar el paréntesis

setInterval(getMessages(), queryInterval); 

setInterval(getMessages, queryInterval); 
8

En realidad, no se está ejecutando setIntervalgetMessages en absoluto (ni siquiera una vez). setInterval espera una referencia a una función, pero que estés ejecutando la función getMessages inmediatamente y pasando su valor de retorno a setInterval (que es undefined). Eso es lo que hacen los parens después de getMessage.

pasar una referencia a setInterval así:

setInterval(getMessages, queryInterval); 

Si este es el único lugar en el que se utiliza getMessages, entonces también podría escribir así:

setInterval(function() { 
    console.log("tick"); 
}, queryInterval); 
+0

@qwertymk tiene razón, pero +1 para esto porque explica más claramente cómo funciona setInterval bajo el capó. – jsh

+0

@jsh - Correcto, lo que no me gusta de respuestas como la que se aceptó es que, aunque es correcta, no enseña mucho. Saber la diferencia entre referirse a una función y ejecutarla es una parte fundamental del lenguaje muy, muy básica. –

Cuestiones relacionadas