Muito já se foi falado sobre chamadas ajax no momento em que a janela é fechada ou atualizada, então esse post é mais para eu não esquecer isso de novo.
Chamadas ajax no momento de se fechar a janela tendem a falhar, pelo simples fato de o script não ter mais um ponto de retornou (porque a janela já fechou), assim, a ação não é executada, com aquela informação que você queria salvar indo para o limbo.
Para contornar essa situação, podemos adotar a seguinte “solução”:
1 2 3 4 5 6 7 | ...
$(window).bind("beforeunload", function(){
if(saveStatus()){
return true;
}
});
... |
1 2 3 4 5 6 7 8 9 10 11 12 | function saveStatus(){
var status = false;
$.ajax({
async:'false',
url:'acao.php',
data:{val:$('#val').val()},
success:function(){
status = true;
}
});
return status;
} |
Neste processo, criamos um bind para o evento, que será chamado antes da janela fechar, mandamos uma chama ajax assincrona, ou seja, o evento só será finalizado quando o ajax retornar, por isso, muito CUIDADO para que esta chamada não demore muito tempo para ser executada e cause alguma lentidão indesejada







