Solo lectura

Google Chrome - Foro de ayuda

Esta página web es un archivo de los hilos antiguos de los foros de Google. Más información

Ajax-Jquery en Chrome

gmingus
5/06/14 0:57
Hola,

Estoy haciendo utilizando Ajax-Jquery para actualizar la base de datos cuando salgo de la pagina.

El script es que funciona con todos los navegadores menos en Google Chrome... he leido algunos foros, y la gente habla de si hay problemas en chrome para ejecutar ajax en localhost, o que si la cache, etc. Yo lo he probado de todas las formas posibles y no entiendo que falla en Chrome. Alquien esta orientado sobre este asunto?


<script type="text/javascript">


        $(document).ready(function() {
                $(window).one('beforeunload',function(event) {


                event.preventDefault();

                $.ajax({
        url: 'out.php',
        type: 'GET',
         async: true,
          data: 'roomx=myroom&user=angel',
        error: function(xhr,status,e) {        console.log('error');        },
        success: function(data, textStatus, xhr) { $('#resp').html(xhr.responseText);},
        complete: function(xhr, status) {alert('Now closing window');

//$(window).unload();

}
});
});
});
</script>

Respuestas (1)

Dennis Tobar
5/06/14 6:37
Hola,

Revisé tu código y me parece consistente. Ahora, tengo dos observaciones:
  1. beforeunload es un evento propietario, por lo cual no es obligación de todos los navegadores implementarla, de hecho la documentación de jQuery dice lo siguiente
    The exact handling of the unload event has varied from version to version of browsers. For example, some versions of Firefox trigger the event when a link is followed, but not when the window is closed. In practical usage, behavior should be tested on all supported browsers, and contrasted with the proprietary beforeunload event.
    Por tanto, no es seguro ni recomendable usar eventos unload o beforeunload.
    Además, el manual también indica lo siguiente
    After this code executes, the alert will be displayed whenever the browser leaves the current page. It is not possible to cancel the unload event with .preventDefault(). This event is available so that scripts can perform cleanup when the user leaves the page.
    Por tanto, cualquier código que esté tras un preventDefault() o que evite que la ventana se cierre será anulado por que no es posible cancelar el evento unload
  2. Probé en un servidor privado y la ejecución del script por ajax se realiza, pero cambié el evento por unload en vez de beforeunload, aunque puedes hacer multibind de evento si los separas por espacio. El código que probé fue:

$(function() {
      $(window).on('unload beforeunload close',
              function(event) {
                  // event.preventDefault(); Esto no es útil
                  $.get('out.php', {roomx: 'myroom', user: 'angel'});
        }); 
});

Espero te sea útil esta respuesta.

Saludos!