2010-05-28 36 views
20

Soy novato de ajax aquí y sé que alguien ya habría encontrado este problema. Tengo una aplicación heredada desarrollada en Spring MVC, tiene un interceptor (filtro) que redirige al usuario a la página de inicio de sesión cuando no hay sesión.Redirigir en Ajax Jquery Llamar

public class SessionCheckerInterceptor extends HandlerInterceptorAdapter { 
public boolean preHandle(HttpServletRequest request, 
    HttpServletResponse response, Object handler) throws Exception { 
    HttpSession session = request.getSession(); 

    // check if userInfo exist in session 
    User user = (User) session.getAttribute("user"); 
    if (user == null) { 
    response.sendRedirect("login.htm"); 
    return false; 
    } 
    return true; 
} 
} 

Por petición no xmlhttp, esto funciona bien .. pero cuando trato de usar Ajax en mi solicitud, todo se vuelve extraño, no es capaz de redirigir a la página de inicio de sesión correctamente. como comprobar el valor de la

xhr.status = 200 = textStatus parseError errorThrown = "no válida JSON -Markup de mi HTML sesión Page-

$(document).ready(function(){ 
     jQuery.ajax({ 
      type: "GET", 
      url: "populateData.htm", 
      dataType:"json", 
      data:"userId=SampleUser", 
      success:function(response){ 
      //code here 
      }, 
     error: function(xhr, textStatus, errorThrown) { 
       alert('Error! Status = ' + xhr.status); 
      } 

     }); 
}); 

he comprobado en mi incendiario que hay un 302 HTTP respuesta, pero no estoy seguro de cómo atrapar la respuesta y redirigir al usuario a la página de inicio de sesión . Cualquier idea aquí? Gracias.

Respuesta

47

jQuery está buscando un JSON resultado tipo, pero debido a que la redirección se procesa de forma automática, recibirá el fuente html generada de su login.htm página.

Una idea es dejar que el navegador sabe que debe redirigir mediante la adición de una variable redirect a que el objeto resultante y la comprobación de que en jQuery:

$(document).ready(function(){ 
    jQuery.ajax({ 
     type: "GET", 
     url: "populateData.htm", 
     dataType:"json", 
     data:"userId=SampleUser", 
     success:function(response){ 
      if (response.redirect) { 
       window.location.href = response.redirect; 
      } 
      else { 
       // Process the expected results... 
      } 
     }, 
    error: function(xhr, textStatus, errorThrown) { 
      alert('Error! Status = ' + xhr.status); 
     } 

    }); 
}); 

También puede añadir una variable de cabecera a su respuesta y deje que su navegador decida dónde redirigir. En Java, en lugar de redireccionamiento, y hacer response.setHeader("REQUIRES_AUTH", "1") en jQuery que haces en el éxito (!):

//.... 
     success:function(response){ 
      if (response.getResponseHeader('REQUIRES_AUTH') === '1'){ 
       window.location.href = 'login.htm'; 
      } 
      else { 
       // Process the expected results... 
      } 
     } 
//.... 

Espero que ayude.

Mi respuesta está muy inspirada por this thread que no debería dejar ninguna pregunta en caso de que todavía tenga problemas.

+0

Hola moonground ... Gracias, creo que ya entendí tu punto, dado este ejemplo ... Muchas gracias ... –

+0

Gracias Thomas. Lo consigo un poco, pero voy a leer el hilo de referencia un poco más para que se hunda un poco. No obstante, parece ser la respuesta que estoy buscando, ¡así que gracias un millón por eso! – Mark

+1

¿Cómo puedo agregar una variable de redirección a la respuesta? – nikli

Cuestiones relacionadas