2012-04-04 16 views
13

Tengo un enlace que envía una POST de Ajax para realizar una acción. Si el usuario aún no ha iniciado sesión, el método de acción devuelve un redireccionamiento 302 a la página de inicio de sesión. Si esto sucede, quiero ver el redireccionamiento, para poder mostrar el formulario de inicio de sesión en un lightbox.¿Cómo evitar que jQuery ajax siga una redirección después de una publicación?

Sin embargo, parece que jQuery sigue la redirección sin devolver el control ni llamar a una función de devolución de llamada. En el código siguiente, nunca se invoca la alerta de 302 redirect, y para cuando se llama a la función dataFiler, los datos son el contenido de la página de inicio de sesión.

¿Cómo puedo ver que la página ha enviado un redireccionamiento 302 y la rama a una acción diferente?

$.ajax(url, 
     { 
      data: postArguments, 
      type : "POST", 
      success: function (data) { alert(' success function'); }, 
      statusCode: 
      { 
       302: function() { alert(' received redirect 302'); }, 
       301: function() { alert(' received redirect 301'); } 
      }, 
      dataFilter: function (data, type) { alert('got data ' + data); return data; } 
     }); 

Respuesta

11

Esto no es una limitación de jQuery pero con el propio JavaScript; no hay forma de detectar una redirección en una solicitud AJAX en JavaScript; los objetos XHR del navegador son auto-mágicamente e invisiblemente siguen los redireccionamientos según the spec.

La opción ideal sería agregar una captura en el código del servidor al detect an AJAX request (encabezado "HTTP_X_REQUESTED_WITH") y devolver una respuesta especial para detectar un usuario anónimo en su JavaScript y manejarlo adecuadamente.

Cuestiones relacionadas