我有多个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();
答案 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>