Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

191
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!