Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

192
Visualizações
¿Cómo limitar la velocidad de las solicitudes ajax?

Hay varios divs y controladores para enviar solicitudes ajax cuando se hace clic en ellos. Mi problema es que no sé cómo obligar a mi controlador a no exceder el límite de 1 solicitud por 30 segundos.

¡Aprecio tu ayuda!

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

El excelente Underscore.js tiene una función de aceleración. Pasa el controlador que desea acelerar y obtiene una versión de velocidad limitada de la misma función.

 var throttled = _.throttle(someHandler, 100); $(div).click(throttled);

http://documentcloud.github.com/underscore/#throttle

Aquí hay una versión simplificada que he usado en mi propio código:

 function throttle(func, wait) { var timeout; return function() { var context = this, args = arguments; if (!timeout) { // the first time the event fires, we setup a timer, which // is used as a guard to block subsequent calls; once the // timer's handler fires, we reset it and create a new one timeout = setTimeout(function() { timeout = null; func.apply(context, args); }, wait); } } }

Una buena manera de probarlo es activando un montón de eventos de desplazamiento y observando el registro de su controlador en la consola de Firebug:

 document.addEventListener("scroll", throttle(function() { console.log("test"); }, 2000), false);

Aquí hay una versión que limita los eventos de clic en div s a una vez cada 30 segundos, según lo solicitado (requiere jQuery):

 $("div").click(throttle(function() { // ajax here }, 30000));
over 4 years ago · Santiago Trujillo Relatório

0

Si desea limitar la tasa, desafortunadamente el método _.throttle que proporciona underscore.js no es su solución. Throttle simplemente se asegurará de que su método nunca se llame más de X segundos y, por lo tanto, todas las llamadas de función posteriores se descartarán hasta que haya pasado ese período.

Si desea establecer un límite de velocidad para que nunca llame a su función más de X veces por segundo, pero no pierda esas llamadas de función por completo, entonces necesita una solución completamente diferente.

He escrito una extensión de guión bajo en https://gist.github.com/1084831

Puede ver un ejemplo práctico en http://jsbin.com/upadif/8/edit#preview

over 4 years ago · Santiago Trujillo Relatório

0

Cree un indicador booleano canFireRequest, o lo que sea, y configúrelo en falso después de cada solicitud ajax. A continuación, cree un lapso de tiempo de 30 segundos que lo restablezca como verdadero; verifique el valor de la bandera antes de cada nueva solicitud.

He aquí un ejemplo aproximado:

 if ($(this).data('canFireRequest')) { // Ajax request goes here $(this).data('canFireRequest', false); } setTimeout(function() { $(this).data('canFireRequest', true) }, 30000);
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda