0

我有以下一段代码。间隔设置为 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

4 回答 4

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 调用失败,您如何保持脚本运行),但这将确保您最终不会与服务器请求不同步!

于 2013-03-05T11:04:20.593 回答
1

你在这里有一个错误:$.ajax没有返回你可以调用 jQuery 的东西。不需要那个(jQuery)

于 2013-03-05T11:01:03.183 回答
1

如下使用它。

setInterval(disp_log, 10 * 1000);

如果您的功能在全球范围内,则将其用作

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

(jQuery)在ajax调用结束后你也不需要。

更重要的是你有(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>
于 2013-03-05T10:58:39.310 回答
0

问题可能出在浏览器上

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

于 2013-04-09T12:29:26.470 回答