Entonces, estoy tratando de construir una función simple para traer todos los mensajes entre dos usuarios. Como una aplicación de chat. Estoy usando setInterval para actualizar los mensajes en caso de que algunos de los usuarios inserten un nuevo mensaje en la base de datos, pero algo sucede: cuando selecciono una conversación y luego selecciono otra, la función recupera los mensajes de la conversación anterior. durante un segundo antes de mostrar los mensajes de la nueva conversación seleccionada. Aquí está:
// Load messages $(".from_messages").click(function() { $("#messageList").empty(); var from = $(this).attr('user_id'); var user = <?php echo $_SESSION['user_id']; ?>; $("input[name='to']").val(from); retrieve(from, user); }) //Interval function retrieve(from, user) { var interval = setInterval(function() { $("#messageList").empty(); $.ajax({ url: "server.php", method: "post", dataType: "json", data: {"from": from, "user": user}, success: function(response) { if(response != "") { $(response).each(function(index, item) { if(item.from_id == user) { $("#messageList").append('<div class="col-12 text-right"><p class="w-50 ml-auto">- '+item.message+'</p></div><br>'); } else { $("#messageList").append('<div class="col-12"><p class="w-50">- '+item.message+'</p></div><br>'); } }) } } }) }, 3000) }Si alguien me puede ayudar, le estaria eternamente agradecido. Y aquí hay un enlace que espero pueda mostrar lo que estoy enfrentando: demostración en video
setInterval(f, n) disparará f cada n milisegundos hasta que borre el intervalo. Cuando llamas a setInterval , devuelve una referencia al intervalo. Guarde esa referencia y llame a clearInterval(reference) cuando desee que el intervalo se detenga; en este caso, antes de crear un nuevo intervalo cuando seleccione una conversación diferente.