Почему не работает clearInterval ()? - PullRequest
2 голосов
/ 15 марта 2012

Я новичок в JavaScript и у меня проблемы с этим скриптом. это часть веб-игры, и сценарий должен обновлять страницу, пока игрок не выиграет или не проиграет. по какой-то причине это не останавливает обновление, я поставил функцию оповещения, чтобы проверить, работают ли функции, и я получаю оповещения, но она все еще продолжает обновлять страницу что я делаю не так?

var t;

$(document).ready(function () {
    intervals();
});
function intervals() {
    t = self.setInterval('refreshData()', 10000);
}
function youWin() {
    var f = $('#status:contains("YOU ARE THE WINNER!")');
    if (f.length > 0) {
        alert("YOU ARE THE WINNER!");
        t = clearInterval(t);
    }
}
function youlose() {
    var f = $('#status:contains("You lost!")');
    if (f.length > 0) {
        alert("You lost!");
        t = clearInterval(t);
    }
}
function refreshData() {
    $('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame');
    youWin();
    youlose();
}

1 Ответ

4 голосов
/ 15 марта 2012

Вам нужно исправить ссылку на self и исправить вызов .load().

.load() является асинхронным, поэтому он не завершается до того, как вы позвоните youWin() и youLose() сразу после,Вам нужна функция завершения, чтобы вы могли проверить выигрыш или проигрыш после успешного завершения .load().

refreshData() должно быть структурировано следующим образом:

function refreshData() {
    $('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame', function() {
        youWin();
        youlose();
    });
}

Вы также должны изменить это:

t= self.setInterval('refreshData()',10000);

на это:

t = window.setInterval(refreshData, 10000);

Я не вижу, чтобы self был даже определен, что могло также вызвать вашу проблему, и вы должны использовать ссылку на функцию напрямуювместо того, чтобы вставлять строку.

И, как проблема очистки, вы должны изменить оба случая этого:

t = clearInterval(t);

на это:

clearInterval(t);

Воточищенная версия кода, которая также устраняет глобальные переменные и ненужные определения функций:

$(document).ready(function() {
    var t = window.setInterval(function() {
        $('#ajaxGame').load('RefreshCurrentPlayerServlet #ajaxGame', function() {
            youWin();
            youlose();
        });
    }, 10000);

    function youWin()  {
        if ($('#status:contains("YOU ARE THE WINNER!")').length) {
            alert("YOU ARE THE WINNER!");
            clearInterval(t);
        }
    }

    function youlose() {
        if ($('#status:contains("You lost!")').length) {
            alert("You lost!");
            clearInterval(t);
        }
    }

});
...