2012-03-14 15 views
10

Estoy desarrollando un chat php/javascript.¿Cómo se ejecuta la función ajax antes de la descarga?

Cuando el usuario inicia sesión, su nombre de usuario se inserta en una tabla MySQL llamada queue. Este inserto devuelve el mysql_insert_id() que se almacena en una variable de sesión llamada $_SESSION['CHAT_QUEUE_ID']

necesito la fila de la tabla de MySQL que se eliminará cuando el usuario cierra la página.

He intentado lo siguiente, pero sin éxito: el archivo

js

window.onbeforeunload = closeSession; 
function closeSession(){ 
    $.ajax({ 
     url: "/chat/process/chat.php", 
     type: "GET" 
    }); 
    return "disconnected"; 
} 

chat.php

$delete= "DELETE FROM queue WHERE id = " . $_SESSION['CHAT_QUEUE_ID']; 
// query, etc 

¿Hay alguna manera de hacer esto?

+3

¿Sabe usted que el apoyo del navegador para '' onbeforeunload'' es limitado? P.ej. la ópera no lo admite. – ckruse

+0

No había pensado en eso. ¿cualquier sugerencia? – matheusvmbruno

+2

El método común es definir un tiempo de espera. Si un usuario no ha tenido una actividad durante un tiempo específico, se desconecta. – ckruse

Respuesta

20

Dispare su ajax async (por defecto para jquery - ajax). Pero el navegador no esperará nada en la descarga.

intente configurar async : false en ajax-settings. Pero nunca puede estar seguro de que esto funcionará en todos los navegadores cada vez.

ver el comentario aquí: http://api.jquery.com/unload/#dsq-comment-body-132164390

+0

Funciona perfectamente. debería haber pensado en eso antes ... ¡GRACIAS! – matheusvmbruno

+0

le invitamos matheusvmbruno – StilgarBF

+2

Además, si está activando la misma llamada ajax funcional que utiliza de forma asíncrona (o varias llamadas ajax), puede configurarlas como una sincronización global en su sentencia onbeforeunload: \t \t $ .ajaxSetup ({ \t \t \t async: falso \t \t}); – JSP64

Cuestiones relacionadas