绑定中的JavaScript setInterval

时间:2014-09-02 11:56:50

标签: javascript jquery

我正在尝试创建一个无限周期性的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>

一切运作良好,但没有无限循环。

4 个答案:

答案 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>