Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/10/2008, 17:30
Avatar de tiranuss
tiranuss
 
Fecha de Ingreso: enero-2008
Mensajes: 30
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Procesos Ajax Simultaneos

Gracias por responder GatorV

Esta es la pagina principal, como verás para actualizar la tabla cada x seg. uso la clase prototype.
En ésta pagina solo muestro la tabla como está inicialmente en la base de datos.

Código:
<html>
<head>
<title></title>
<script src="prototype.js" language="javascript"></script>

<script language="JavaScript" type="text/javascript">
function nuevoAjax()
{
    var xmlhttp=false;
    try
    {
        // Creacion del objeto AJAX para navegadores no IE
        xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
        try
        {
            // Creacion del objet AJAX para IE
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(E) { xmlhttp=false; }
    }
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') { xmlhttp=new XMLHttpRequest(); }

    return xmlhttp;
} 

function cargaenvios()
{

ajax=nuevoAjax();
ajax.open("POST", "enviar.php", true);
document.getElementById("empezar").value= "Enviando";
document.getElementById("empezar").disabled= "disabled";
ajax.onreadystatechange=function()
{
    if (ajax.readyState==4)
    {
        document.getElementById("envi").innerHTML=ajax.responseText;
    }else{
        document.getElementById("envi").innerHTML='<img src="loader.gif" align="middle" /> Enviando...';

}
}
ajax.send();
}  

function tablamail() {

            var target = $('tabla');

            if (!target) return false;

            new Ajax.PeriodicalUpdater(target, 'tabla.php',{frequency:'2'});

        }    
 </script>

</head>
<body onload="tablamail()">

<input type="button" id="empezar" name="empezar" value="Empezar envio" onclick="javascript:cargaenvios();" />

<div id="envi"></div>
<br><br>

<div id="tabla">
<?
include ("../../conexion.php");
$link=Conectarse();

$query = mysql_query("SELECT * FROM empleados ") or die(mysql_error());

echo "<table  border=\"1\">
<tr><td><b>nombre</b></td>
<td><b>puesto</b></td>
<td><b>departamento</b></td>
<td><b>email</b></td>
<td><b>status</b></td>
</tr>";

while ($row = mysql_fetch_array($query)){

echo "<tr><td>$row[nombre]</td><td>$row[puesto]</td><td>$row[departamento]</td><td>$row[email]</td><td>$row[status]</td></tr>";
}


echo "</table>";
?>
</div>
</body>
</html>
luego llamo con ajax a la pagina enviar.php, haciendo click en el boton "Empezar envio", que me hace todos los envios de cada uno de los mails que va sacando de la base con un while y me actualiza uno por uno el status en la base.


Por otro lado la llamada ajax a la pagina de actualizacion (tabla.php) cada x segundos tiene practicamente esto, donde solo recoge nuevamente los valores y actualiza la tabla principal:

Código:
<?
include ("../../conexion.php");
$link=Conectarse();

$query = mysql_query("SELECT * FROM empleados ") or die(mysql_error());

echo "<table  border="1">
 <tr><td><b>nombre</b></td>
 <td><b>puesto</b></td>
 <td><b>departamento</b></td>
 <td><b>email</b></td>
 <td><b>status</b></td>
 </tr>";

while ($row = mysql_fetch_array($query)){

echo "<tr><td>$row[nombre]</td><td>$row[puesto]</td><td>$row[departamento]</td><td>$row[email]</td><td>$row[status]</td></tr>";
}


echo "</table>";
?>
El problema es que hasta que no termina el envío y el primer ajax recoge "envio terminado" desde el script php (enviar.php) recién ahí me muestra la tabla actualizada.
no lo hace en tiempo real o cada 2 seg. se actualizara para que pareciera en tiempo real.

Ojala me haya explicado un poco mas con el codigo...