Tengo un código que me gustaría ejecutar en una página. Mi problema es que no quiero que se ejecute más de una vez en ningún momento. Puede ejecutarse varias veces, pero no mientras se ejecuta otra instancia de sí mismo. Estoy usando jQuery y estoy cargando contenido ajax.

Solo necesito algo que evite que los usuarios hagan clic cientos de veces y desarrollen la cola y hagan ping a mis montones de servidores.

¿Es posible?

Gracias.

4
Daniel 22 ago. 2009 a las 14:00

3 respuestas

La mejor respuesta

Si solo se llama a una función en diferentes áreas, parece que solo quieres algún tipo de prueba básica de semáforo, por ejemplo:

isRunning = false;

function whatever() {

   if (!isRunning) {
      isRunning = true;
      $.ajax(...., function() {
          isRunning = false;
      });
   }
}

Esta pregunta parece un poco relacionada.

RE su edición: También vale la pena señalar que cualquier solución de JavaScript que coloque aquí para evitar un aluvión de solicitudes también debe considerarse en el lado del servidor.

10
Community 23 may. 2017 a las 12:33

Creo que sería más fácil de usar si deshabilitara sus controles durante el tiempo en que la solicitud de ajax esté en camino.

De esta manera, no solo se salvaría de hacer clic en masa, sino que también el usuario sabría que no tiene sentido matar el mouse.

1
Zed 22 ago. 2009 a las 10:15

Solo mantenga una variable para marcar si se está ejecutando o no:

var running = true;

... complete: function() { running = false; }
2
Greg 22 ago. 2009 a las 10:06