尝试执行两个函数递归时未定义一个函数

时间:2011-08-16 21:13:59

标签: javascript jquery function recursion undefined

我有一个页面,客户有时会长时间打开而不刷新(超过24小时)。该页面上的一些操作需要有效的PHP会话,因此我构建了一组简单的函数来每10分钟运行一次这种检查。

2个功能:

  1. checkLogin()
  2. refreshTimer()
  3. 我们调用checkLogin()启动,checkLogin()调用refreshTimer()。在计时器完成后,它应该调用checkLogin(),它应该调用refreshTimer()并重新开始该过程。

    我们第一次直接调用checkLogin()时效果很好。但是,当refreshTimer()尝试调用checkLogin()时,checkLogin()会出现“函数未定义”错误。

    从我的研究看起来我应该能够调用checkLogin()而不将其传递给refreshTimer()。

    我确信我可能会遗漏一些明显的东西。谢谢你的帮助!

    function checkLogin()
    {
        $.ajax({
            url: "/mysite.com/dev/includes/check_login_helper.php",
            success: function(logged_in)
            {
                if(logged_in == "false")
                {
                    // they are logged out - redirect them to login page
                    alert("logged out");
                }
            }
        });
        refreshTimer();
    }
    
    
    function refreshTimer()
    {
        var t = setTimeout("checkLogin()",15000); // do each 10 min currently shorter for test
    }
    
    //start the process up
    checkLogin();
    

    固定&使用checkInterval

    function checkLogin()
    {
        $.ajax({
            url: "/mysite.com/dev/includes/check_login_helper.php",
            success: function(logged_in)
            {
                if(logged_in == "false")
                {
                    // they are logged out - redirect them to login page
                    alert("logged out");
                }
            }
        });
    }
    
    
      setInterval(checkLogin(),15000); // do each 10 min currently shorter for test
    

2 个答案:

答案 0 :(得分:2)

不要将字符串传递给setTimeout; it'seval in disguise。在这种情况下,也没有理由捕获setTimeout返回的值。

function refreshTimer()
{
    setTimeout(checkLogin, 15000);
}

答案 1 :(得分:1)

var t = setTimeout("checkLogin()",15000);

需要

var t = setTimeout(checkLogin,15000);

此方法接受函数而不接受字符串。