新间隔开始时如何在功能中停止前一个间隔

时间:2015-06-05 04:09:18

标签: javascript ajax setinterval

当我调用我的函数时,它会启动一个间隔来刷新聊天屏幕。但是,当我选择不同的用户(不同的参数)时,前一个间隔继续,我不知道在新的间隔开始时如何停止前一个间隔。我试过从函数外部调用clearInterval(),但我认为我的语法必须是错误的,因为它将间隔显示为未定义。

这是我的代码。

function selectrecipient(x,y){
  clearInterval(refint);
  var refint = setInterval(function(){
    $.ajax({
      type: "POST",
      url: '../includes/chat/msgs.php',
      data: ({ chosenuser : x }), 
      success: function(data){
        document.getElementById('messagehistory').innerHTML = data;
      }
    });

    document.getElementById("recipientid").value = ""+x+"";
  }, 1000);
}

1 个答案:

答案 0 :(得分:0)

您需要在外部作用域中声明变量refint,否则每次调用该方法时都会重置该变量的值。在您的情况下,因为您在每次调用selectrecipient时都将其声明为局部变量,所以将使用新变量,而clearInterval时,它将具有值undefined

var refint;

function selectrecipient(x, y) {
    clearInterval(refint);
    refint = setInterval(function () {
        $.ajax({
            type: "POST",
            url: '../includes/chat/msgs.php',
            data: ({
                chosenuser: x
            }),
            success: function (data) {
                document.getElementById('messagehistory').innerHTML = data;
            }
        });

        document.getElementById("recipientid").value = "" + x + "";
    }, 1000);
}