Foros del Web » Programando para Internet » Javascript »

Contador dentro de setInterval no funciona

Estas en el tema de Contador dentro de setInterval no funciona en el foro de Javascript en Foros del Web. Hola, me he quebrado la cabeza durante un tiempo sin buenos resultados. Estoy experimentando con javascript / jquery / Ajax Pongo el código y al ...
  #1 (permalink)  
Antiguo 27/11/2012, 21:24
 
Fecha de Ingreso: septiembre-2009
Mensajes: 6
Antigüedad: 14 años, 7 meses
Puntos: 0
Contador dentro de setInterval no funciona

Hola, me he quebrado la cabeza durante un tiempo sin buenos resultados.
Estoy experimentando con javascript / jquery / Ajax

Pongo el código y al final explico el problema.

Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Ataca </title>
<script src="jquery-1.8.2.min.js"></script>
<script language="javascript">

    $(document).ready(function() {

    var numero=0;
      $('#saludar').submit(function(){    		
        save('saludar', formatNumber( ajustar(8, numero++)),'code=');
	return false;	
      });
      
     
     setInterval("save('saludar', formatNumber( ajustar(8, numero++)),'code=')",10000);
	 
    }); // end ready
	

    save = function(form,valor,datos){
		      // Enviamos el formulario usando AJAX
      $.ajax({
         type: 'POST',
         url: $('#'+form).attr('action'),
         //data: $('#'+form).serialize(),
         data: datos +valor,
         dataType: "html",
         error: function(data){
			 //$('#result').html(data);
        },
         // Mostramos un mensaje con la respuesta de PHP
         success: function(data) {
            //$('#result').html(x);
         }
      });
    }
//Llena con ceros a la izquierda el tamaño deseado p.e 000000001
   function ajustar(tam, num) {
	if (num.toString().length <= tam) return ajustar(tam, "0" + num)
	else return num;
	}

//Formatea el numero con puntos p.e 000.000.001	
function formatNumber(num){
   num += '';
   var splitStr = num.split('.');
   var splitLeft = splitStr[0];
   var splitRight = splitStr.length > 1 ? '.' + splitStr[1] : '';
   var regx = /(\d+)(\d{3})/;
   while (regx.test(splitLeft)) {
      splitLeft = splitLeft.replace(regx, '$1' + '.' + '$2');
   }
   return splitLeft + splitRight;
}
</script>
</head>
<body>

<form id="saludar" name="saludar" action="http://servidor.com/saluda.php" method="post">
<input type="hidden" id="code" name="code" value="000.000.000"/>
<input type="submit" value="Saluda"><span>7</span>
</form>

<div id="result"></div>
</body>
</html>
bien, tengo un formulario con un boton "saluda". Cada que presiono el boton manda a saluda.php por metodo POST el valor code=000.000.001, y si lo presiono de nuevo code=000.000.002 etc.. Hasta aqui ok,
Pero sucede que necesito automatizar el proceso, es decir, enviar el recordatorio al usuario 000.000.001, luego al 000.000.002 cada 10 segundos por ejemplo.. Por ello metí el setInterval, pero simplemente no hace nada...
El problema esta en:
setInterval("save('invitar', formatNumber( ajustar(8,numero++)),'code=')",10000);

pues cuando reemplazo numero++ con un numero, entonces me envia la peticion cada 10 segundos, pero sin incrementar... No encuentro solución y espero puedan ayudarme..
Saludos
  #2 (permalink)  
Antiguo 28/11/2012, 09:07
 
Fecha de Ingreso: noviembre-2012
Mensajes: 32
Antigüedad: 11 años, 5 meses
Puntos: 3
Respuesta: Contador dentro de setInterval no funciona

buenos dias carlosego,

no me he mirado el codigo, pero a bote pronto la funicon setinterva debe ir asignada a una variable,

var variable=settinterva().......

asi cuandoa la cortas llamas a esa variable ejem:window.clearInterval(variable);

saludos
  #3 (permalink)  
Antiguo 28/11/2012, 11:27
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Contador dentro de setInterval no funciona

buenas,
intenta pasando a setInterval una función definida en el mismo scope donde se encuentra la variable. dentro de esta función invocas a save con sus parámetros.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #4 (permalink)  
Antiguo 28/11/2012, 19:41
 
Fecha de Ingreso: septiembre-2009
Mensajes: 6
Antigüedad: 14 años, 7 meses
Puntos: 0
Respuesta: Contador dentro de setInterval no funciona

Muchas gracias a todos por sus respuestas.

Para vimon:
Me ha quedado claro lo que comentas, ya que así puedo cortar el intervalo cuando lo necesite, pero tal como está sin asignar el setInterval a ninguna variable funciona bien, (salvo por el problema en la variable)

Para zerokilled:
Efectivamente esa era la solución, no me había metido al tema de los scopes de las variables, y ahora la he metido dentro del mismo scope y me ha funcionado perfecto!

Muchas gracias!

Etiquetas: ajax, jquery
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:02.