Cómo gestionar una petición de redirección después de una llamada jQuery Ajax

Estoy usando $.post() para llamar a un servlet usando Ajax y luego usando el fragmento HTML resultante para reemplazar un elemento div en la página actual del usuario. Sin embargo, si la sesión se agota, el servidor envía una directiva de redirección para enviar al usuario a la página de inicio de sesión. En este caso, jQuery sustituye el elemento div por el contenido de la página de inicio de sesión, obligando a los ojos del usuario a presenciar una escena realmente rara.

¿Cómo puedo gestionar una directiva de redirección desde una llamada Ajax con jQuery 1.2.6?

Utilice la llamada de bajo nivel $.ajax():

$.ajax({
  url: "/yourservlet",
  data: { },
  complete: function(xmlHttp) {
    // xmlHttp is a XMLHttpRquest object
    alert(xmlHttp.status);
  }
});

Pruebe esto para una redirección:

if (xmlHttp.code != 200) {
  top.location.href = '/some/other/page';
}
Comentarios (9)

en el servlet debes poner response.setStatus(response.SC_MOVED_PERMANENTLY); para enviar el estado xmlHttp '301' que necesitas para una redirección...

y en la función $.ajax no debes usar la función .toString(), sólo

if (xmlHttp.status == 301) { top.location.href = 'xxxx.jsp'; }

el problema es que no es muy flexible, no puedes decidir a donde quieres redireccionar..

redirigir a través de los servlets debería ser la mejor manera. pero todavía no puedo encontrar la manera correcta de hacerlo.

Comentarios (0)

Además, probablemente querrá redirigir al usuario a la URL dada en las cabeceras. Así que finalmente se verá así:

$.ajax({
    //.... other definition
    complete:function(xmlHttp){
        if(xmlHttp.status.toString()[0]=='3'){
        top.location.href = xmlHttp.getResponseHeader('Location');
    }
});

UPD: Opps. Tengo la misma tarea, pero no funciona. Haciendo estas cosas. Te mostraré la solución cuando la encuentre.

Comentarios (1)