2012-06-27 12 views
5
$(document).ready(function() { 
    (function poll() { 
     setTimeout(function() { 
      $.ajax({ 
       url: "/project1/api/getAllUsers", 
       type: "GET", 
       success: function(data) { 
        console.log("polling"); 
       }, 
       dataType: "json", 
       complete: poll, 
       timeout: 5000 
      }), 5000 
     }); 
    })(); 
});​ 

Esto solo se sigue ejecutando tan rápido como el servidor puede responder, pero esperaba que solo sondeara cada 5 segundos. ¿Alguna sugerencia?jQuery recursivo ajax encuesta utilizando setTimeout para controlar el intervalo de encuesta

EDIT: Debo añadir, 5 segundos después de que la solicitud se haya completado sería preferible.

+0

Parece que está ejecutando la siguiente encuesta de AJAX 5 segundos después de que la anterior se haya completado. ¿Qué tal eso quieres cambiar? Lo mejor que puedo entender es tu pregunta, eso era lo que querías. –

+0

@Richard Neil Ilagan: Quiero que se ejecute aproximadamente cada 5 segundos (5 segundos después de que se haya completado la solicitud de Ajax también está bien y me dicen, mejor práctica) pero lo que observo es que la solicitud se ejecuta mucho más rápidamente, como si estuviera ignorando el retraso de 5 segundos. – chrisjleu

+0

Lo siento, salí a cenar. Echó un segundo vistazo y descubrió que parece que se está equivocando. Apareció una respuesta a continuación. –

Respuesta

6

Parece que usted ha logrado obtener su argumento retraso setTimeout escrito en el lugar equivocado.

$(document).ready(function() { 
    (function poll() { 
    setTimeout(function() { 
     $.ajax({ 
      url: "/project1/api/getAllUsers", 
      type: "GET", 
      success: function(data) { 
       console.log("polling"); 
      }, 
      dataType: "json", 
      complete: poll, 
      timeout: 5000 
     }) //, 5000 <-- oops. 
    }, 5000); // <-- should be here instead 
    })(); 
});​ 

Si sigue las llaves, verá que usted está llamando setTimeout como:

setTimeout(function() { 
    $.ajax(), 5000 
}) 

y debe ser

setTimeout(function() { 
    $.ajax(); 
}, 5000) 

Esto debe llamar a la encuesta de AJAX 5 segundos después de que el anterior haya completado.

+0

Sí, eso fue todo, error tonto. Gracias. – chrisjleu

+1

Nah, todo bien, diría yo. Ocurre lo mejor de nosotros. Buena suerte con eso. :) –

1

Si debe sondear cada 5 segundos y no necesariamente 5 segundos después de completar la última solicitud, puede usar setInterval. No sé si eso es aceptable, pero haría innecesaria la recursividad.

function poll() { 

      $.ajax({ 
       url: "/project1/api/getAllUsers", 
       type: "GET", 
       success: function(data) { 
        console.log("polling"); 
       }, 
       dataType: "json" 
     }); 
    } 

setInterval(poll, 5000); 
0

En caso de que desee utilizar la sintaxis de promesa de jQuery, en lugar de la sintaxis de devolución de llamada aquí hay otra manera ordenada.

function poll() { 
    $.get('http://your-api-endpoint.com') 
    .done(function() { 
     // 200 - OK response 
    }) 
    .fail(function() { 
     // Error Response 
    }) 
    .always(function() { 
     setTimeout(function() { 
      poll(); 
     }, 5000); 
    }); 
} 

poll(); 
Cuestiones relacionadas