javascript - 为什么这个clearInterval总是在函数完成时起作用?

标签 javascript ajax

我是网络编程新手,现在正在学习 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});
    } 
  });

});

最佳答案

大概 refreshChats 执行 Ajax。

清除间隔后,您将阻止 refreshChats 再次运行。

如果 HTTP 请求已发送,则不会阻止 HTTP 响应到达时触发事件处理程序,因此仍会处理响应。

您需要设置一个标志来取消响应的处理(或者使成功处理程序中止而不执行任何重要操作)。

关于javascript - 为什么这个clearInterval总是在函数完成时起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21016508/

相关文章:

javascript - GWT 中的 Google map FusionTable 实现

javascript - 我应该如何使用 bacon.js 保存多个值的运行总计?

javascript - jsperf : Uncaught HierarchyRequestError: Failed to execute 'appendChild' on 'Node' : This node type does not support this method

Javascript 特殊字符

javascript - 调用ajax后如何使按钮工作

javascript - 卸载事件之前的 iframe

JavaScript onsubmit PreventDefault 无法有条件地工作

javascript - 使用 csv 解析文本定义变量的简单方法?

php - 如何根据我的 AJAX 结果主动增加我的计数器?

php - AJAX脚本删除表头