我需要使用AJAX每隔5秒钟从数据库中获取并显示数据,为此我使用递归void f(int& x) { cout << x; }
void main() {
int a = 2;
f(a); // This is fine
int const b = 2;
f(b); // Error: 'void f(int &)' : cannot convert argument 1 from 'const int' to 'int &'
}
,类似下面的代码
setTimeout
我的页面var timerId = setTimeout(function tick() {
alert( "tick" );
timerId = setTimeout(tick, 2000);
}, 2000);
上还有3个过滤器(select
元素),每当我在选择列表中选择某个选项或更改我的选择时,我需要清除超时并再次使用新设置5秒,并在5秒后获得新数据。
我的代码
#books-filter, #authors-filter, #stores-filter
但我不确定,$(document).ready(function() {
"use strict"
var $body = $('body');
function filterBooks() {
var start = null,
interval = 2000;
function select() {
$("#books-filter, #authors-filter, #stores-filter").change(function() {
clearTimeout(start);
timer();
});
}
select();
function timer() {
start = setTimeout(function tick() {
start = setTimeout(tick, interval);
filter();
}, interval);
}
timer();
function filter() {
var $form = $('#filter');
var url = $form.attr('action');
var data = $form.serialize();
if(data !== '') {
$.ajax({
type: 'post',
url: url,
data: data,
dataType: 'json',
error: function(response){
},
success: function(response) {
//console.log(response);
}
});
}
}
}
filterBooks();
});
会以这种方式工作吗?
答案 0 :(得分:1)
看,如果你想在某个时间间隔内多次执行某些功能,你将从setInterval()
方法中获益更多:
function retrieveMyData() {
// your ajax stuff
}
var myInterval = setInterval(retrieveMyData, 5000);
然后,当您的select
元素触发更改事件时,您只需重新启动间隔
$(document).on('change', '#your-target-select', function () {
clearInterval(myInterval);
myInterval = setInterval(retrieveMyData, 5000);
});
答案 1 :(得分:1)
正如markoffden所说,您可以考虑使用间隔,因为它是实现周期性循环的直接函数。
但要回答你的问题:
只要您可以检索相应的超时ID,clearTimeout
将在侦听器中工作。
下面是一个全局存储当前超时的示例,其中包含一个标志和按钮,用于在超时循环之间切换:
http://codepen.io/clemeno/pen/aNmzdm