Javascript:setInterval函数不起作用

时间:2013-03-05 10:56:36

标签: javascript

我有以下代码。间隔设置为10秒。

(function($){ 
    $(document).ready(function() { 
        disp_log(); 
        setInterval(function () {
            disp_log();
        }, 10 * 1000);

        function disp_log() { 
            $.ajax({ 
                "type" : "GET", 
                "url" : "/get_log/", 
                "dataType" : "json", 
                "cache" : false, 
                "success" : function(json) { 
                    data=""
                    for(var j = 0; j < json.length; j++) { 
                        data+="<tr><td>"+json[j]+"</td></tr>"
                    } 
                    $("#log").html(data);
                } 
            })(jQuery); 
        }
    }); 
})(django.jQuery); 

但不会发生令人耳目一新的事。有人可以告诉你为什么吗?

4 个答案:

答案 0 :(得分:1)

使用如下。

setInterval(disp_log, 10 * 1000);

如果您的功能是全局的,那么将其用作

setInterval("disp_log()", 10 * 1000);

在ajax呼叫结束后你也不需要(jQuery)

更重要您拥有(function($){$(document).ready(function() {。 你不需要它,因为两者都是一样的。

运行经过测试的代码

<script type="text/javascript">

    $(document).ready(function()
    {
        disp_log(); 
        setInterval(disp_log, 10 * 1000);

        function disp_log()
        {
            $.ajax({ 
                "type" : "GET", 
                "url" : "/get_log/", 
                "dataType" : "json", 
                "cache" : false, 
                "success" : function(json)
                { 
                    var data;
                    for(var j = 0; j < json.length; j++)
                    { 
                        data+="<tr><td>"+json[j]+"</td></tr>"
                    } 
                    $("#log").html(data);
                } 
            }); 
        }
    }); 

</script>

答案 1 :(得分:1)

这里有一个错误:$.ajax没有给你回复调用jQuery的东西。不需要(jQuery)

答案 2 :(得分:1)

你需要做的就是调试。首先,如果您正在获取任何代码,那么首先要解决这个问题。您可以使用....

来完成此操作
"success" : function(json) { 
    console.log(json);
    //or..
    alert(json);
} 

如果他们没有返回任何内容,那么你的AJAX请求就是问题,而不是你的setInterval代码。

但是在你的setInterval代码中,你应该知道ajax调用可能需要任何时间来加载,所以你不应该继续运行它。更好的方法是使用setTimeout ....

setTimeout(disp_log,10*1000);

然后,在您的成功函数中,再次输入相同的代码......

"success" : function(json) { 
    setTimeout(function() {
        disp_log()
    },10*1000);
} 

这将确保您的代码在数据上次成功后10秒内保持运行。还有其他问题需要考虑(例如,如果ajax调用失败,如何保持脚本运行),但这样可以确保您最终不会与服务器请求失去同步!

答案 3 :(得分:0)

问题可能是浏览器

我在使用这个setInterval()函数时遇到了问题,但后来我发现这是我的mozilla的问题。当我尝试在Chrome中运行时,它非常完美。