2010-02-02 28 views
5

Después de hacer clic en un botón, deseo disparar una llamada Ajax y luego redirigir a otras páginas sin esperar el resultado ajax. ¿Es posible? Mi código de la siguiente manera:jQuery Ajax: redirigir a otras páginas sin esperar el resultado

$('button').click(function(){ 
    $.get('mailer.php', function(){ 
     window.location.replace("result.php"); 
    }); 
}); 

El código anterior esperar el resultado Ajax antes de redirección. ¿Puedo dejar que el ajax se ejecute en la parte posterior y pasar a otras páginas?

+0

+1 ¡Bienvenido a StackOverflow, @Kelvin! – Sampson

Respuesta

2

Parece que el script al que está enviando AJAX está enviando un correo electrónico. Puedo ver cómo esperar para completarlo resultaría en un retraso en el fin del usuario. Así es como normalmente resuelvo este problema:

En lugar de tener su script mailer.php inmediatamente envíe el correo electrónico, almacene los datos del mensaje en su db. No envíe el correo electrónico durante la llamada AJAX. Esto dará como resultado un proceso muy rápido para el usuario.

Luego, puede configurar un trabajo CRON que apunta a un script que ha creado especialmente para enviar correos electrónicos que se han almacenado en el DB.

¿Tiene sentido?

+0

gracias! El trabajo de maíz parece una mejor manera de manejar mi situación :) – Kelvin

2

Si se mueve a otra página, la conexión con el servidor podría perderse (no hay ninguna regla que impida que el navegador lo haga) y es posible que la acción no se complete. En resumen: tienes que esperar.

+1

Estoy de acuerdo. ¿Qué sucede si hay un error en la solicitud de AJAX y el formulario/datos deben enviarse de nuevo? Lo mejor sería esperar el resultado y luego redirigir a la otra página, según la respuesta de la solicitud AJAX. –

1

Si sale de inmediato, la solicitud será abandonada. Debería incluir la lógica en el servidor para mantener el proceso iniciado por la solicitud jquery ajax.

Por ejemplo, en PHP existe la función ignore_user_abort(), que, cuando se establece en true, continuará un proceso incluso después de que el usuario haya cancelado la solicitud.

+0

¿Qué sucede si el navegador ni siquiera realiza la solicitud porque la ubicación ha cambiado? No hay garantía de que iniciará la solicitud. ¿Qué pasa si solo la mitad (los primeros 2 encabezados de exaple) se envían debido a la latencia? –

+0

Según el OP, la solicitud se realiza * antes * de cambiar la ubicación. – Sampson

Cuestiones relacionadas