Ik gebruik $.post()
om een servlet aan te roepen met behulp van Ajax en gebruik dan het resulterende HTML fragment om een div
element te vervangen in de huidige pagina van de gebruiker's. Echter, als de sessie time out gaat, stuurt de server een redirect directive om de gebruiker naar de login pagina te sturen. In dit geval vervangt jQuery het div
element door de inhoud van de login pagina, waardoor de ogen van de gebruiker's getuige zijn van een inderdaad zeldzaam tafereel.
Hoe kan ik een redirect directive van een Ajax-oproep met jQuery 1.2.6?
Gebruik de low-level $.ajax()
oproep:
$.ajax({
url: "/yourservlet",
data: { },
complete: function(xmlHttp) {
// xmlHttp is a XMLHttpRquest object
alert(xmlHttp.status);
}
});
Probeer dit voor een redirect:
if (xmlHttp.code != 200) {
top.location.href = '/some/other/page';
}
in de servlet moet je zetten
response.setStatus(response.SC_MOVED_PERMANENTLY);
om de '301' xmlHttp status te sturen die je nodig hebt voor een redirection...
en in de $.ajax functie moet je niet de .toString()
functie gebruiken..., maar
indien (xmlHttp.status == 301) { top.location.href = 'xxxx.jsp'; }
het probleem is dat het niet erg flexibel is, je kunt niet beslissen waar je wilt redirecten...
redirecting via de servlets zou de beste manier moeten zijn. maar ik kan nog steeds niet de juiste manier vinden om het te doen.
Daarnaast wil je de gebruiker waarschijnlijk doorsturen naar de gegeven URL in de headers. Dus uiteindelijk zal het er zo uitzien:
$.ajax({
//.... other definition
complete:function(xmlHttp){
if(xmlHttp.status.toString()[0]=='3'){
top.location.href = xmlHttp.getResponseHeader('Location');
}
});
UPD: Opps. Heb dezelfde taak, maar het werkt niet. Deze dingen aan het doen. Ik'll tonen u oplossing wanneer ik'll het vinden.