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

Autorecarga página unicamente cuando haya mensajes nuevos (mediante sentencia sql)

Estas en el tema de Autorecarga página unicamente cuando haya mensajes nuevos (mediante sentencia sql) en el foro de Frameworks JS en Foros del Web. Buenas Me han dicho que con ajax se podría implementar. La cuestión es que tengo una página que muestra los 10 ultimos mensajes publicados en ...
  #1 (permalink)  
Antiguo 14/09/2008, 14:12
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Autorecarga página unicamente cuando haya mensajes nuevos (mediante sentencia sql)

Buenas

Me han dicho que con ajax se podría implementar.

La cuestión es que tengo una página que muestra los 10 ultimos mensajes publicados en un foro. (mediante php y sentencias sql)
Actualmente esa página se autorecarga cada 40 segundos para tener actualizados los últimos mensajes del foro.
Mi idea es la de que esa página se autorecargue unicamente cuando sea necesario, evitándo así una carga de transferencia de datos innecesaria.

Había pensado en hacer una consulta sql cada segundo en un segundo plano, por ejemplo, de modo que cada vez que el último mensaje del foro no coincida con la última consulta que hice hace 1 segundo, la página se autorecargue actualizando así los datos.

¿sabéis si esto es posible?
¿tal vez sea mejor publicarlo en javascript? Buenas

Y bueno, ya si veo que esto es posible, me gustaría que tampoco sea un incordio, de modo que mientras estés leyendo los mensajes de la página y salga uno nuevo no se autorecargue al instante porque te impide navegar con tranquilidad y terminar de leer lo que estabas leyendo.
He pensado que cada vez que haya un nuevo mensaje, se recargue pero cada 40 segundos por ejemplo, de manera que si no hay mensajes nuevos, no se autorecarga nunca, pero cuando encuentre uno nuevo, a los 40 segundos se autorecargue.

Perdonad si lo he liado demasiado, espero que se entienda.

Saludos y gracias.
  #2 (permalink)  
Antiguo 14/09/2008, 15:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Hola IMAC/,

Usando prototype, y Ajax.PeriodicalUpdater, puedes hacer lo que requieres, ya que hace los requests cada X segundos, y aparte tiene el parámetro de decay para estar checando si el contenido no es el mismo no lo actualiza hasta que sea un nuevo contenido, revisa el manual de prototype y con él podrás hacer lo que requieres.

Saludos.
  #3 (permalink)  
Antiguo 14/09/2008, 15:49
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Cita:
Iniciado por GatorV Ver Mensaje
Hola IMAC/,

Usando prototype, y Ajax.PeriodicalUpdater, puedes hacer lo que requieres, ya que hace los requests cada X segundos, y aparte tiene el parámetro de decay para estar checando si el contenido no es el mismo no lo actualiza hasta que sea un nuevo contenido, revisa el manual de prototype y con él podrás hacer lo que requieres.

Saludos.
Gracias, pero se trata de la primera vez que tengo contacto con ajax y no tengo ni idea :)
He abierto un tema en la sección de javascript, fuera de este subforo antes de abrirlo aquí, donde me han dado una solución pero que no consigo hacer funcionar.
http://www.forosdelweb.com/f13/autor...8/#post2578193

Si ves conveniente, mueve o elimina uno de los 2 temas.

Gracias de todos modos.
  #4 (permalink)  
Antiguo 15/09/2008, 05:51
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Bueno, pongo aquí de nuevo lo que me estaban diciendo en el otro mensaje y no acaban de resolver mandándome a este subforo:

Os explico un poco mejor para que veáis donde puedo estar fallando.

Mi archivo 10ultimos.php contiene esto:
Código PHP:
<?php require("http://miforo.com/foro/ultimos.php"); 
$posts recentTopics(40null'array');
    echo 
'
        <center><table border="0">'
;
    foreach (
$posts as $post)
        echo 
'
            <tr>
            
                <td valign="top">
                     <a href="'
$post['href'], '"  target="_blank">'$post['subject'], '</a>
                    <span class="por">'
$txt[525], ' ('$post['poster']['link'], ') </span>
                    '
$post['new'] ? '' '<a href="' $scripturl '?topic=' $post['topic'] . '.msg' $post['new_from'] . ';topicseen#new" target="_blank"><img src="' $settings['images_url'] . '/' $context['user']['language'] . '/new.gif" alt="' $txt[302] . '" border="0" /></a>''
                </td>
                <td align="right" nowrap="nowrap">
                    '
$post['time'], '
                </td>
            </tr>'
;
    echo 
'
        </table></center>'
?>

Y luego he creado otro archivo llamado "autorecarga.php" con este otro código que me has dicho:
Código PHP:
<head>
<
script>
function 
getXMLHttpRequest(){
                var 
aVersions = [ "MSXML2.XMLHttp.5.0",
                        
"MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0",
                        
"MSXML2.XMLHttp","Microsoft.XMLHttp"
                
];

                if (
window.XMLHttpRequest){
                        
// para IE7, Mozilla, Safari, etc: que usen el objeto nativo
                        
return new XMLHttpRequest();
                }else if (
window.ActiveXObject){
                        
// de lo contrario utilizar el control ActiveX para IE5.x y IE6.x
                        
for (var 0aVersions.lengthi++) {
                                try {
                                    var 
oXmlHttp = new ActiveXObject(aVersions[i]);
                                    return 
oXmlHttp;
                                }catch (
error) {
                                
//no necesitamos hacer nada especial
                                
}
                    }
                }
        }
function 
ver(){
            var 
par "r="+Math.random();
            var 
url "http://miweb.com/10ultimos.php";
                var 
ajax getXMLHttpRequest();
            
ajax.open("POST",url,true);
            
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
                
ajax.onreadystatechange  respuesta;
            
ajax.send(par);                
                function 
respuesta(){
                        if (
ajax.readyState==4){
                                if (
ajax.status==200){
                                        
document.getElementById("ultimo").innerHTML=ajax.responseText;
                    }
                  }
                }
        }

volver_cargar=window.setInterval("ver();",1000);
</script>
</head>
<body>
<div id="ultimo"></div>  
</body> 
Saludos y gracias.
  #5 (permalink)  
Antiguo 15/09/2008, 10:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

¿Y cual es el error?

Saludos.
  #6 (permalink)  
Antiguo 15/09/2008, 12:23
Avatar de IMAC/  
Fecha de Ingreso: octubre-2005
Mensajes: 738
Antigüedad: 18 años, 6 meses
Puntos: 14
De acuerdo Respuesta: Autorecarga página unicamente cuando haya mensajes nuevos (mediante senten

Cita:
Iniciado por GatorV Ver Mensaje
¿Y cual es el error?

Saludos.
Vaya, que se me olvidó decirlo, perdona.

Pues... que básicamente la página de "autorecarga.php" que contiene el código ajax no me muestra absolutamente nada, se queda en blanco y en el código fuente se puede ver todo el código tal cual lo he dejado aquí.
No carga ni de forma estática la de "10ultimos.php" que contiene el otro código que he dejado aquí también formando una tabla con los últimos 10 mensajes.

¿Tal vez es porque 10ultimos.php tiene toda una tabla y no solo un dato cambiante?
¿tal vez por tener más de un "echo" en 10ultimos.php?

No tengo ni idea, porque de ajax no entiendo nada, por eso preguntaba...

Gracias GatorV.
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 08:01.