使用setTimeout在自身内部调用函数

Viv*_*vek 6 javascript jquery loops settimeout

$(document).ready ( 

    function ready() {
        var tester = $.ajax({
                async: false,
                url: "test_parse.php"
            }).responseText;
        document.getElementById('test').innerHTML = tester;
        setTimeout(ready(), 3000); 
   }

);
Run Code Online (Sandbox Code Playgroud)

嘿伙计我想在这个内部调用一个函数但是每次我这样做时我的浏览器只是继续加载并最终Apache关闭(显然不是我预期的结果).认为你们可以帮我找出解决方案吗?谢谢!

Joe*_*Joe 10

setTimeout采用函数引用:

setTimeout(ready, 3000); 
Run Code Online (Sandbox Code Playgroud)

setTimeout(ready(), 3000); 
Run Code Online (Sandbox Code Playgroud)

话虽如此,我也会这样做:

$(document).ready ( 

    function ready() {
        var tester = $.ajax({
                url: "test_parse.php",
                success: function (data) {
                    document.getElementById('test').innerHTML = data;
                    setTimeout(ready, 3000); 
                }
            })
   }

);
Run Code Online (Sandbox Code Playgroud)

因为async: false将锁定浏览器,直到数据从服务器返回

  • @Travis:[没有充分的理由提出同步XHR请求.](http://kellegous.com/ecrits/001096)[8.4%(http://blogs.msdn.com/b/ieinternals/archive上个月报告的IE9挂起的/2011/08/03/do-not-use-xmlhttprequest-in-synchronous-mode-unless-you-like-to-hang.aspx是由于同步XHR.这是糟糕的用户体验; 在"success"回调函数中没有理由无法完成OP尝试做的事情. (2认同)

Tra*_*ebb 6

这是错的:

setTimeout(ready(), 3000); 
Run Code Online (Sandbox Code Playgroud)

这是正确的:

setTimeout(ready, 3000); 
Run Code Online (Sandbox Code Playgroud)

ready()实际上正在调用该函数.ready只是对函数的引用,这就是你想要的.