I'm utilizando $.post()
para chamar um servlet utilizando Ajax e então utilizando o fragmento HTML resultante para substituir um elemento div
na página atual do usuário's. Entretanto, se o tempo de sessão acabar, o servidor envia uma diretiva de redirecionamento para enviar o usuário para a página de login. Neste caso, jQuery está substituindo o elemento div
pelo conteúdo da página de login, forçando os olhos do usuário's a testemunhar uma rara cena de fato.
Como posso gerenciar uma diretiva de redirecionamento de uma chamada Ajax com jQuery 1.2.6?
Utilize a chamada de baixo nível $.ajax()
:
$.ajax({
url: "/yourservlet",
data: { },
complete: function(xmlHttp) {
// xmlHttp is a XMLHttpRquest object
alert(xmlHttp.status);
}
});
Tenta isto para um redireccionamento:
if (xmlHttp.code != 200) {
top.location.href = '/some/other/page';
}
no servlet que você deve colocar
response.setStatus(response.SC_MOVED_PERMANENTLY);
para enviar o '301' xmlHttp status que você precisa para um redirecionamento...
e na função $.ajax você não deve utilizar a função .toString()
..., apenas
if (xmlHttp.status == 301) { top.location.href = 'xxxx.jsp'; }
o problema é que não é muito flexível, você pode'não decidir para onde você quer redirecionar...
O redirecionamento através dos servlets deve ser a melhor maneira. mas ainda não consigo encontrar a maneira certa de fazer isso.
Além disso, você provavelmente vai querer redirecionar o usuário para a URL indicada nos cabeçalhos. Então, finalmente vai parecer com isto:
$.ajax({
//.... other definition
complete:function(xmlHttp){
if(xmlHttp.status.toString()[0]=='3'){
top.location.href = xmlHttp.getResponseHeader('Location');
}
});
UPD: Opostas. Tem a mesma tarefa, mas não funciona. A fazer estas coisas. I'vai mostrar-lhe a solução quando I'vai encontrá-la.