2012-10-06 25 views
7

Lo que sé:
Cuando hago una llamada AJAX a mi servidor, se crea un controlador, la solicitud se envía, mi script php recibe la solicitud y lo procesa y lo --si lo digo - devuelve una respuesta, que mi javascript analiza como lo necesito. También sé que php continuará procesando la solicitud incluso si el usuario cierra el navegador o cambia de página (todo se hace por el lado del servidor, entonces ¿por qué no? ^. ^).AJAX - Receving la respuesta cuando el usuario cambia páginas

Lo que necesito saber:
se mata el manejador ajax cuando el usuario cambia las páginas de mi sitio? Por ejemplo: el usuario está en mysite.com/foo.php. Hacen clic en un enlace que envía una solicitud ajax a mi servidor. La respuesta de esa solicitud se mostrará en div # resp on foo.php. Luego navegan a mysite.com/bar.php antes de recibir la respuesta.

Si cargo las mismas funciones de javascript y tengo el elemento div # resp necesario en bar.php, ¿puede la función de javascript que llamó el ajax recibir la respuesta del servidor y pasarla a la barra de div # resp en la barra? php, mostrando así la respuesta? ¿O el asa Ajax original ya no está disponible? Y si es ya no está disponible en javascript estándar, ¿hay alguna implantación en jQuery que me permita recuperar la respuesta y mostrarla en bar.php?

Espero que esté claro.

+0

La solicitud Ajax no ** ** matar una vez a la sesión del navegador se cierra. Es totalmente asincrónico. –

+1

Debería aprovechar un 'socket web' separado como el' hilo httpd' que manejó que la respuesta ajax 'se ha cerrado. Es por eso que usamos cosas como' socket.io' y 'node.js'. – Ohgodwhy

Respuesta

7

Según lo que describes, no, una vez que navegas a otra página y causas una recarga de página, todos tus manejadores de javascript son re-instanciado y los originales destruidos.

5

La respuesta es no. Cuando cambia de página, el proceso de javascript se cancela y se reinicia. Nada permanece entre la recarga de la página.

Aunque, si su página también cambia en ajax, entonces el proceso no se cancela, y puede recibir la respuesta. (Por cierto, esto podría hacerse casi sin problemas para el usuario final con PushState en el navegador reciente)

0

Puede guardar los valores en localStorage a medida que los recibe, o puede guardar todas las respuestas de datos ajax en su sesión, memcache o redis. Esto significa que si el servidor recibe una solicitud, primero guarda la respuesta en algún lugar antes de devolverla. Eliminar el mensaje/respuesta de una lista dependerá de su situación. Algunos sistemas le permiten cerrar notificaciones, otros desaparecen después de la primera vez que un usuario los ve. La desaparición es volátil. El usuario puede o no realmente verlo.

Suena como un "mensaje flash" de varias bibliotecas. Es posible que desee ver la implementación de esos sistemas.

0

Si bien la respuesta original aceptada es correcta - no puede recibir una respuesta a la solicitud ajax una vez que navega a otra página - hay una solución: si hace que el sitio web sea una sola página, podrá obtener la respuesta.

2

No, no se garantiza que tendrá su respuesta XHR (AJAX) de vuelta antes de que el usuario navegue a la página siguiente.

Si desea ser capaz de detectar, en el lado del servidor, cuando un usuario abandona su página, debe usar WebSocket o una tecnología similar. Una conexión WebSocket es una conexión de larga ejecución a un host extranjero que puede detectar fácilmente en el lado del servidor cuando se corta. https://github.com/sockjs es un ejemplo de un cliente + servidor WebSocket.

Si simplemente desea mostrar algo al usuario antes de que se desplace de la página, debe mirar la ventana. Antes de descargar, antes de descargar los incendios antes de que el usuario abandone la página, pero no le permitirá realizar ninguna sincronización Solicitudes de AJAX Para obtener más información, vea https://developer.mozilla.org/en-US/docs/Web/API/window.onbeforeunload

0

Tuve la misma situación en uno de mis proyectos. Para tener algo transitorio entre páginas, TIENE que tener algo que reconozca de una página a otra. Lo más simple de usar es sesiones de PHP (vi que usas PHP). Lo suficientemente fácil, puede tener en cada página cargar una Solicitud de Asincronización (Ajax) que verificará en el servidor (usando PHPSESSID) si se inicia una actividad. Usted tiene la opción de verificar cada carga de página (en docready) o con un intervalo.

Por supuesto, perderá todo si el usuario cierra la (s) pestaña (s) del navegador.

1

Si desea hacer esto, cree una "aplicación web de una sola página". Claro y simple, no ubique una url nueva.

En su lugar, use pushstate/popstate para cambiar la dirección en el navegador y luego use javascript/dynamic html para volver a dibujar la página.

A continuación, puede manejar todas las respuestas ajax.

1

Otra opción es tener un evento de carga que active una solicitud de AJAX en el servidor y le pregunte si hay algo que hacer. El servidor debería hacer un seguimiento de "cosas" y dejar que el navegador sepa qué sucede.

Esencialmente, el navegador sondeará el servidor al inicio de cada página.

No creo que un ejemplo de código sea necesario o aplicable porque podría variar para cada aplicación.

0

LO ANTES DE SALIR DE UNA PÁGINA DE TODO AJAX llamadas no estará disponible para la página si es utilizado por HTTP POST SIMPLE

El ciclo de vida de una petición HTTP comúnmente se ve así:

Un usuario visita la URL de un sitio web. Esto crea una solicitud que se enruta a un servidor web a través de Internet (una red de DNS, enrutadores y conmutadores) a través de HTTP (Protocolo de transferencia de hipertexto). El servidor web recibe la solicitud HTTP y responde al usuario con la página web (o contenido) que se solicitó. Cada vez que hace clic en un enlace y visita una página web, detrás de escena realiza una solicitud y, a su vez, recibe una respuesta de un servidor web. Tenga en cuenta que las solicitudes HTTP se pueden realizar a través de muchos canales, no solo navegadores web. Por ejemplo, una solicitud HTTP podría hacerse usando TELNET, o un cliente escrito en JAVA o C# etc.

Por lo tanto, debe usar sockets para que el ciclo de vida de http se pueda ajustar.

http://devhub.fm/http-requestresponse-basics/

Cuestiones relacionadas