Pergunta

Eu sou novo para JavaScript e estou tendo problemas com esse script.é parte de um jogo de web e o script é supor para atualizar a página até que o jogador ganha ou perde.por alguma razão ele não parar de se atualizar, eu coloquei uma função de alerta para verificar se as funções de obras, e eu ficar alertas, mas ainda continuar a atualizar a página.o que estou fazendo de errado?

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();
}
Foi útil?

Solução

Você precisa corrigir a referência para self e corrigir a .load() chamada.

.load() é assíncrono para que ele não se completa antes de chamar youWin() e youLose() logo após ele.Você precisa de uma função de conclusão, então você pode verificar a ganhar ou a perder após o .load() concluída com êxito.

refreshData() deve ser estruturado como este:

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

Você também deve alterar isso:

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

para isso:

t = window.setInterval(refreshData, 10000);

Eu não vejo que self foi ainda definido, de modo que também poderia ter sido causando o seu problema e você deve usar a função de referência diretamente ao invés de colocar em uma seqüência de caracteres.

E, como uma limpeza de problema, você deve alterar ambas as ocorrências dessa:

t = clearInterval(t);

para isso:

clearInterval(t);

Aqui está um limpos versão do código que também elimina variáveis globais e desnecessários definições de função:

$(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);
        }
    }

});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top