redirect - javascript - guardar formulario con ajax jquery - Cómo gestionar una petición de redirección después de una llamada jQuery Ajax

jquery ajax example / javascript / 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 redireccionamiento para enviar al usuario a la página de inicio de sesión. En este caso, jQuery está reemplazando el elemento div con el contenido de la página de inicio de sesión, lo que obliga a los ojos del usuario a presenciar una escena rara.

John Slegers



Answer #1

El enfoque que se muestra a continuación puede aplicarse a todas las peticiones ajax de forma inmediata (si no redefinen el evento beforeSend,obviamente).

$.ajaxSetup({
    beforeSend: checkPulse,
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        document.open();
        document.write(XMLHttpRequest.responseText);
        document.close();
    }
});
[Authorize]
public virtual void CheckPulse() {}
protected void Application_EndRequest()
{
    if (Context.Response.StatusCode == 302
        && (new HttpContextWrapper(Context)).Request.IsAjaxRequest())
    {                
        Context.Response.StatusCode = 200;
        Context.Response.AddHeader("REQUIRES_AUTH", "1");
    }
}
function checkPulse(XMLHttpRequest) {
    var location = window.location.href;
    $.ajax({
        url: "/Controller/CheckPulse",
        type: 'GET',
        async: false,
        beforeSend: null,
        success:
            function (result, textStatus, xhr) {
                if (xhr.getResponseHeader('REQUIRES_AUTH') === '1') {
                    XMLHttpRequest.abort(); // finalizar la ejecución adicional de ajax
                    window.location = location;
                }
            }
    });
}