J’utilise $.post()
pour appeler une servlet en utilisant Ajax, puis j’utilise le fragment HTML résultant pour remplacer un élément div
dans la page actuelle de l’utilisateur. Cependant, si la session se termine, le serveur envoie une directive de redirection pour renvoyer l'utilisateur vers la page de connexion. Dans ce cas, jQuery remplace l'élément div
par le contenu de la page de connexion, ce qui oblige les yeux de l'utilisateur à assister à une scène rare.
Comment puis-je gérer une directive de redirection à partir d'un appel Ajax avec jQuery 1.2.6 ?
Utilisez l'appel de bas niveau $.ajax()
:
$.ajax({
url: "/yourservlet",
data: { },
complete: function(xmlHttp) {
// xmlHttp is a XMLHttpRquest object
alert(xmlHttp.status);
}
});
Essayez ceci pour une redirection :
if (xmlHttp.code != 200) {
top.location.href = '/some/other/page';
}
dans la servlet, vous devriez mettre
response.setStatus(response.SC_MOVED_PERMANENTLY);
pour envoyer le statut xmlHttp '301' ; dont vous avez besoin pour une redirection...
et dans la fonction $.ajax, vous ne devez pas utiliser la fonction .toString()
..., juste
si (xmlHttp.status == 301) { top.location.href = 'xxxx.jsp' ; }
le problème est que ce n'est pas très flexible, on ne peut pas décider où l'on veut rediriger...
La redirection par les servlets devrait être la meilleure solution, mais je n'arrive toujours pas à trouver la bonne façon de procéder.
En outre, vous voudrez probablement rediriger l'utilisateur vers l'URL indiquée dans les en-têtes. Au final, cela ressemblera à ceci :
$.ajax({
//.... other definition
complete:function(xmlHttp){
if(xmlHttp.status.toString()[0]=='3'){
top.location.href = xmlHttp.getResponseHeader('Location');
}
});
UPD : Opps. J'ai la même tâche, mais ça ne marche pas. Je fais ce genre de choses. Je vous montrerai la solution quand je l’aurai trouvée.