Одна функция не определяется при попытке сделать две функции рекурсии - PullRequest
0 голосов
/ 17 августа 2011

У меня есть страница, которую клиенты иногда оставляют открытой в течение продолжительного времени без обновления (более 24 часов).Некоторые действия на этой странице требуют допустимого сеанса PHP, поэтому я создал простой набор функций для выполнения этой проверки каждые 10 минут.

2 Функции:

  1. checkLogin ()
  2. refreshTimer ()

Мы вызываем 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 ]

2 голосов
/ 17 августа 2011

Не передавайте строку в setTimeout; это eval замаскированный .В этом случае также нет причин фиксировать значение, возвращаемое setTimeout.

function refreshTimer()
{
    setTimeout(checkLogin, 15000);
}
1 голос
/ 17 августа 2011
var t = setTimeout("checkLogin()",15000);

должно быть

var t = setTimeout(checkLogin,15000);

, этот метод принимает функции, а не строки.

...