我正在尝试创建一个无限周期性的get循环:
<script type=text/javascript>
$(function() {
$('a#log').bind('click', setInterval(function() {
$.get(
$LOG + '/json_test',
{},
function(data) {
document.getElementById("logs").innerHTML = data.replace('\n', '<br/>');
}
);
}, 2000));
});
</script>
如果我这样做
<script type=text/javascript>
$(function() {
$('a#log').bind('click', function() {
$.get(
$LOG + '/json_test',
{},
function(data) {
document.getElementById("logs").innerHTML = data.replace('\n', '<br/>');
}
);
});
});
</script>
一切运作良好,但没有无限循环。
答案 0 :(得分:1)
正如@sacho所说,setInterval()
返回一个数字。您将该数字绑定为单击处理程序而不是函数。这就是为什么不起作用,但是......
你可以做这样的事情只是想每次调用ajax函数,你不能确定你的响应是每2000ms。
$('a#log').click(function (e) {
e.preventDefault();
infiniteLoop();
})
function infiniteLoop() {
$.get(
$LOG + '/json_test',
{},
function(data) {
$("#logs").html(data.replace('\n', '<br/>'));
infiniteLoop();
}
);
}
注意:如果已加载库
,则每次都可以使用jQuery(特别是管理DOM)答案 1 :(得分:1)
您需要将 setInterval 功能包装在中间函数中,以防止在点击之前执行该功能。换句话说,一个函数内部的函数。
$(function () {
$('a#log').bind('click', function () {
setInterval(function () {
$.get('example.json',{}, function (data) {
$('#logs').html(JSON.stringify(data).replace('\n', '</br>'));
});
}, 2000);
});
});
JSfiddle Working Demo:http://jsfiddle.net/x13sruaf/
答案 2 :(得分:0)
$('a#log').on('click', infiniteLoop);
function infiniteLoop() {
setInterval(function() {
}, 2000);
}
答案 3 :(得分:0)
你可以试试这个:
<script type=text/javascript>
$(function() {
var refreshIntervalId;
$('a#log').bind('click', function (){
clearInterval(refreshIntervalId);
refreshIntervalId = setInterval(function() {
$.get(
$LOG + '/json_test',
{},
function(data) {
document.getElementById("logs").innerHTML = data.replace('\n', '<br/>');
}
);
}, 2000);
});
});
</script>