Вопрос

Я новичок в 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();
}
Это было полезно?

Решение

Вам необходимо исправить ссылку на 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);
        }
    }

});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top