停止一直执行的javascript函数

时间:2017-07-19 10:57:41

标签: javascript jquery ajax function

我有多个JavaScript函数,它们都在同一时间运行并且在循环中运行,因为我正在从REST API中读取一些数据。

有没有办法停止使用按钮或其他东西执行这些脚本?

function termostat1_on_off_get() {
  var request = $.ajax({
    type: "GET",
    url: "http://192.168.1.113:8080/rest/items/termostat1_on_off/state"
  });

  request.done(function(data) { 
    console.log("On/off" + data);
    if (data == 1) {
      termostat1_on_off = "Vklopljen";
      $("#m_t1_vklopljen").css('background-color', '#cccccc');
      $("#m_t1_izklopljen").css('background-color', '#efefef');
    } else {
      termostat1_on_off = "Izklopljen";
      $("#m_t1_vklopljen").css('background-color', '#efefef');
      $("#m_t1_izklopljen").css('background-color', '#cccccc');
    }
  });

  request.fail(function(jqXHR, textStatus) { 
    console.log( "Failure: " + textStatus );
  });

  setTimeout(termostat1_on_off_get, 5000);
}

termostat1_on_off_get();

2 个答案:

答案 0 :(得分:2)

您可以使用clearTimeout()来停止正在运行的超时。为此,您需要保存setTimeout调用返回的ID,然后将其作为参数提供给clearTimeout(),如下所示:

var timeout;

function termostat1_on_off_get()
{
    // your ajax logic here...

    // inside the callbacks:
    timeout = setTimeout(termostat1_on_off_get, 5000);
}

termostat1_on_off_get();

function stopTimeout() {
  clearTimeout(timeout);
}

然而 ,您应该注意到AJAX轮询是一种反模式,应该真正避免。如果您需要使UI与服务器保持同步,那么您应该查看WebSockets或Server Side Events。它们表现得更好,并使您的服务器免于崩溃。

答案 1 :(得分:-1)

使用setInterval代替setTimeout

var i = 0;

function log() {
  console.log(i++);
}

var interval = setInterval(log, 1000);

function stop() {
  clearInterval(interval)
};
<button onclick="stop()">Stop</button>