Mensajes de la bandeja de entrada de actualización en vivo

Necesito una sugerencia con mensajes de actualización en vivo, aquí está mi código:

<script>
    function fetch_messages(){
        var user_id = "1" // example id

        $.ajax({
            url: "do_fetch.php",
            type: "POST",
            data: { user_id : user_id },
            dataType: "json",
            success: function(data) {
                for (var i = 0; i < data.length; i++) {
                    $("#messages_list").append('<div id="'+data.id+'">'+data.message+'</div>');
                }
                setTimeout("fetch_messages()", 3000);
            }
        });
    }
    $(function(){
        fetch_messages();
    });
</script>

y hay mensajes div:

<div id="messages">
</div>

código php:

<?php
    include('connection.php')

    $user_id = $_POST['user_id'];
    $my_id = $_SESSION['user_id'];

    $sql = 'SELECT * FROM messages WHERE user_id = '.mysql_real_escape_string($user_id).' AND my_id = '.mysql_real_escape_string($my_id);
    $result = mysql_query($sql, $connection);

    echo json_encode($result);
?>

Este código funciona, pero no quiero leer todos los mensajes y mostrarlos, solo necesito cargar mensajes nuevos, entonces, ¿cómo debo hacer eso? ¿Necesito poner un campo oculto con marca de tiempo y verificar con ajax el tiempo posterior a eso?

preguntado el 27 de julio de 12 a las 15:07

4 Respuestas

Primero carga con ajax solo 20 mensajes en un ul

<ul>
  <li>message 1</li>
  <li>message 2</li>
  <li>message 3</li>
  <li>message 4</li>
  <li>message 5</li>
  <li id="{{message_date}}">message 6</li>
</ul>

Luego obtenga la identificación del último mensaje para obtener la fecha.

$('li').last().attr('id')

puede tener un botón de clic para cargar más.

var message_date = $('li').last().attr('id');
$.ajax({
    url: "do_fetch.php",
    type: "POST",
    data: { date : message_date },
    dataType: "json",
    success: function(data) {
        for (var i = 0; i < data.length; i++) {
            $("ul").append('<liid="'+ data.date+'">'+data.message+'</li>');
        }
    }
});

En el archivo php seleccionas los mensajes con fecha > fecha_mensaje con límite 30.

También puede pasar la identificación del usuario.

Respondido 27 Jul 12, 15:07

Guarde la identificación del último mensaje enviado y luego envíe esa identificación a través de ajax, y consulte todo lo que sea más nuevo que esa identificación.

Respondido 27 Jul 12, 15:07

Deberá agregar un campo booleano de "lectura" a su tabla. El valor predeterminado es falso y luego, cada vez que se vean los mensajes, debe actualizar todos los mensajes vistos para que se lean.

SELECT * FROM `messages` WHERE user_id=? AND my_id=? AND `read`=0;
UPDATE `messages` SET `read`=1 WHERE user_id=? AND my_id=?;

Respondido 27 Jul 12, 15:07

Gracias, creo que esta es la mejor solución. - Mirza Delic

Puede usar, por ejemplo, next: setInterval(fetch_messages,5000) . Cada cinco segundos se enviará una solicitud. Que en el servidor guardar en la hora actual de la sesión (por primera vez). Durante la segunda solicitud, obtenga de la sesión la última vez, luego obtenga la hora actual y obtenga todas las filas entre la hora actual y la última.

Respondido 27 Jul 12, 15:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.