我是网络编程的新手,我现在正在学习javascript和jquery ajax ..
这是我的javascript代码。刷新变量是每2秒刷新聊天的间隔(从数据库中获取聊天并在聊天容器中显示它们)。我想停止间隔,然后在提交消息后向容器添加新消息。
问题是当我按下回车键时,新聊天会附加到容器上,是的。但突然之间容器被刷新并用来自数据库的记录替换那条新消息(所以它已经消失了(clearInterval还没有工作))。当函数完成时,clearInterval正在工作..为什么?为什么? :(
var oldscrollHeight;
var newscrollHeight;
var refresh;
function refreshChats(){
oldscrollHeight = $(".chatContainer").prop("scrollHeight");
$.ajax({
url:"get_chats.php",
cache: false,
success: function(html){
$(".chatContainer").html(html);
//Auto-scroll
newscrollHeight = $(".chatContainer").prop("scrollHeight");
if(newscrollHeight > oldscrollHeight){
$(".chatContainer").prop({ scrollTop: $(".chatContainer").prop("scrollHeight") });
}
}
});
}
$("document").ready(function(){
refresh = setInterval(refreshChats,2000);
$(".chatValue").keypress(function(e){
if(e.keyCode == 13 && $(".chatValue").val() != ""){
clearInterval(refresh);
var me = $(".me").val();
var chat = $(".chatValue").val();
var time = $(".timeChat").val();
$(".chatContainer").append(me+": "+chat+" ("+time+")"); //showing a new message before database updated
$(".chatValue").val("");
$.post("chat.php",{submitChat: true,chat: chat,time: time});
}
});
});
答案 0 :(得分:1)
据推测refreshChats
执行Ajax。
清除时间间隔后,可以阻止refreshChats
再次运行。
如果HTTP请求已经已发送,则不会阻止事件处理程序在HTTP响应到达时触发,因此仍将处理响应。
您需要设置一个标志来取消响应的处理(或使成功处理程序中止而不做任何重要的事情)。