我正在修复公司正在开发的聊天中的一些错误。目前发生的事情是聊天窗口中加载的消息不属于所选聊天。 DB和Java方法中的查询是正确的。
由于正在使用setInterval(),我相信当我选择其他聊天时,如果已经触发了setInterval方法,则消息加载不正确。
有没有办法在加载邮件后触发setInterval并在点击其他聊天时暂停它?
我想要更新的方法: PS:没有setInterval,它不会显示传入的消息。只需再次点击聊天即可。
function atualizarChat(idChat,nomeChat)
{
// Parametros
var dados = "Token=" + encodeURIComponent(token);
if(idMensagemUltima != 0){
dados += "&idChatMensagem="+encodeURIComponent(idMensagemUltima);
}
dados += "&idChat="+encodeURIComponent(idChat);
$.ajax({
type : "POST",
url : "/ListarMensagensServlet",
data : dados,
dataType : "json",
success : function(resultado) {
idChatEscolhido = idChat;
// Troca nome do chat
if(nomeChat != ''){
$('#NomeUsuarioChat').text(nomeChat);
}
var mensagemAntiga = idMensagemUltima;
// Adiciona as mensagens na tabela
for(mensagem of resultado){
if(mensagem['bool'] == 1){
mostrarSuaMensagem(mensagem['mensagem']);
}
else{
mostrarRespostaMensagem(mensagem['mensagem']);
}
// troca data da ultima mensagem
idMensagemUltima = mensagem['idChatMensagem'];
}
if(idMensagemUltima > mensagemAntiga){
// Joga chat para baixo
$('#CaixaDeChat').stop().animate({
scrollTop: $('#CaixaDeChat')[0].scrollHeight
}, 800);
}
}
});
}
答案 0 :(得分:0)
首先,请将您的问题移至Portuguese StackOverflow(pt.stackoverflow.com)。 关于您的解决方案,
我建议创建一个小函数来处理这种行为,你只需要创建一个setInterval
并将它们的值设置为一个变量。
var interval = null;
var intervalHandler = function(status, yourFunction, intervalTime) {
if(status) {
interval = setInterval(yourFunction, intervalTime);
}
else {
clearInterval(interval);
}
}
因此,status
是boolean
变量,其值为true/false
。值false
将执行clearInterval
条件,true
将执行setInterval
条件。
使用:
intervalHandler(true, yourFunction, 1000); // for set
intervalHandler(false); // for clear