Foros del Web » Programando para Internet » Javascript » Frameworks JS »

contador ajax

Estas en el tema de contador ajax en el foro de Frameworks JS en Foros del Web. Hola: Puse un contador aquí: http://www.caricatos.net/ con este fichero php: actualizaContador.php Código: <?php header('Content-Type: text/xml'); ?> <?php Function cont ($sumar) { $archi = "contador.txt"; if ...
  #1 (permalink)  
Antiguo 17/07/2005, 04:26
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
contador ajax

Hola:

Puse un contador aquí: http://www.caricatos.net/ con este fichero php:

actualizaContador.php
Código:
<?php
header('Content-Type: text/xml');
?>
<?php
Function cont ($sumar)	{
	$archi = "contador.txt";
	if (file_exists($archi))	{
		$fich = fopen($archi, "r+");
		$cuenta = (int) fgets($fich, 7);
		$cuenta ++;

		if ($sumar)	{
			rewind($fich);
			fwrite($fich, $cuenta, 7);
		}

		fclose($fich);
		}
	else	{
		$fich = fopen($archi, "w");
		$cuenta = "1";
		fwrite($fich, $cuenta, 7);
		fclose($fich);
		}
	return $cuenta;
}

echo '<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>';

echo "<pepe><total>".cont($_GET["sumar"] == "si")."</total></pepe>";
?>
Y se supone que debe chequear el contador para incrementarlo en tiempo real (con un setInterval de 10000 (cada 10 segundos), pero se bloquea mucho.

El código javascript se puede ver en la misma página.

Otra cosilla... en opera no pude usar el método post ...

...También he visto que mozilla deja el mensaje de "Transfiriendo datos desde..." tal como si se tratase de la falta de un close() en un documento abierto con open()...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #2 (permalink)  
Antiguo 17/07/2005, 10:07
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Bueno, voy a poner el contenido de la página porque voy a modificarla:

Código:
<html>
<head>
<script>
var pedido = false;
var cuenta = 0;
function ajuste(n, d)	{
	if (n.length < d)
		return ajuste("0" + n, d);
	else
		return n;
}

function modificar(n)	{
	cuenta = n;
	document.images["contador"].src = "scripts/n.php?n=" + ajuste(n.toString(), 5);
}

function respuestaXMLCuenta()	{// 
	if (pedido.readyState == 4)	{
		if (pedido.status == 200)	{
			datoTraido = pedido.responseXML.documentElement;
			// éxito: damos valores en blanco al array galería para mostrar luego
			nuevaCuenta = parseInt(datoTraido.getElementsByTagName('total')[0].firstChild.data);
			if (nuevaCuenta != cuenta)
				modificar(nuevaCuenta);
			setInterval("pedido = false; consultaContador()", 20000);
		}
		else	{
			alert("error\n" + pedido.statusText);
		}
	}
}

function pedirXMLPost(sitio, respuesta, variables)	{
	if (window.XMLHttpRequest)	{
		pedido = new XMLHttpRequest();
		pedido.onreadystatechange = respuesta;
		pedido.open("POST", sitio, true);
		pedido.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		pedido.send(variables);
	}
	else
		if (window.ActiveXObject)	{
			pedido = new ActiveXObject("Microsoft.XMLHTTP");
			if (pedido)	{
				pedido.onreadystatechange = respuesta;
				pedido.open("POST", sitio, true);
				pedido.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				pedido.send(variables);
			}
		}
}

function pedirXML(sitio, respuesta)	{
	if (window.XMLHttpRequest)	{
		pedido = new XMLHttpRequest();
		pedido.onreadystatechange = respuesta;
		pedido.open("GET", sitio, true);
		pedido.send(null);
	}
	else
		if (window.ActiveXObject)	{
			pedido = new ActiveXObject("Microsoft.XMLHTTP");
			if (pedido)	{
				pedido.onreadystatechange = respuesta;
				pedido.open("GET", sitio, true);
				pedido.send();
			}
		}
}

function consultaContador()	{
	if (!pedido)
		pedirXML("scripts/actualizaContador.php?sumar=no", respuestaXMLCuenta);
//	pedirXMLPost("scripts/actualizaContador.php", respuestaXMLCuenta, "sumar=no");
}

function actualizaContador()	{
	pedirXML("scripts/actualizaContador.php?sumar=si", respuestaXMLCuenta);
//	pedirXMLPost("scripts/actualizaContador.php", respuestaXMLCuenta, "sumar=si");
}
</script>
<style>
#visitas	{
	border: 1px black solid;
}
</style>
</head>
<body onload="actualizaContador()">
<h1>
Bienvenido a Caricatos.net
</h1>
<div>
<p>Esta página ha sido visitada: <span id=visitas>
<img name="contador" src="scripts/n.php?n=00000" />
</span>
veces.
</p>
</div>
</body>
</html>
Se puede ver la petición con el método post que no está en uso porque no corre en opera...

Voy a quitar el setInterval para seguir con la página, pero creo que es lo que funciona mal...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 06/08/2005, 17:24
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 21 años
Puntos: 35
loading...............



tenia el mismo problema, en algun elemento donde ponìa los nuevos datos y en un intervalo de 10 seg..., vaya si que se queda hasta COLGADA el navegador, pero lo resolvì usando del lado del servidor y ajustando el cliente.

La idea es que, si en el servidor los datos son identicos a lo que ya se enviò, entonces solo se suelta --> " " <--- nada, y en el cliente

if(objeto.responsetext==" ")
{
no hago nada
}
else

{
cargo lo nuevo
}

y asì no se me cuelga incluso en un intervalo de 1000


connection closed.
__________________

Maborak Technologies
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 02:00.