Foros del Web » Programando para Internet » Jquery »

Problema con beforeunload de jquery

Estas en el tema de Problema con beforeunload de jquery en el foro de Jquery en Foros del Web. Buenas noches, tengo la siguiente situacion que no logro arreglar, estoy tratando de hacer un seguimiento de usuarios en mi web, quiero saber cuanto tiempo ...
  #1 (permalink)  
Antiguo 13/08/2012, 22:50
 
Fecha de Ingreso: mayo-2009
Mensajes: 242
Antigüedad: 15 años, 6 meses
Puntos: 2
Pregunta Problema con beforeunload de jquery

Buenas noches, tengo la siguiente situacion que no logro arreglar, estoy tratando de hacer un seguimiento de usuarios en mi web, quiero saber cuanto tiempo pasa un usuario en cada una de las secciones y saber que articulos visita, entonces, primero en el onload del Body llamo esta funcion:

Código:
function seguimiento(){
	var urlActual = location.search;
        urlActual = urlActual.replace('?','');
	urlActual = urlActual.split('&');
	urlActual = urlActual[0].split('=');

	$.ajax({
	  type:"POST",
	  url:"<?php echo $_G_->baseURL ?>?F=usuarios&_f=iniciarTiempo",
	  dataType:"html",
	  data:{F:urlActual[1]},
	  success:function(response){
		  //alert(response);
	  }
	});
}
Lo que realiza la funcion anterior es mandar llamar una funcion de php donde verifico a que seccion entro y si es de las que me interesa registrar datos, si es entonces inicialiso una variable de session asignandole el tiempo en el momento que entro, si no entoces destruyo esa variable de session:

Código PHP:
public function iniciarTiempo(){
    if(isset(
$_SESSION['idU']) && $_SESSION['idU'] != ''){
      
$seccion $_POST['F'];
      
      if(
$seccion == "tips" || $seccion == "privilegios" || $seccion == "noticias" || $seccion == "herramientas"){
        
$_SESSION['tiempoSeccion'] = time();
      }else{
        unset(
$_SESSION['tiempoSeccion']);
      }
    }

Despues en el evento beforeunload:

Código:
$(window).bind('beforeunload', function(){
      var urlActual = location.search;
	  $.ajax({
		type:"POST",
		url:"<?php echo $_G_->baseURL ?>?F=usuarios&_f=actividadUsuarioGeneral",
		dataType:"html",
		data:{url:urlActual}
	  });
  });
Mando ejecutar otra funcion de php en donde inserto los datos en caso de que el usurio este en alguna seccion que deseo registrar:

Código PHP:
public function actividadUsuarioGeneral(){
    if(isset(
$_SESSION['idU']) && $_SESSION['idU'] != ''){
      
$tiempo $this->convertirHorasMinutosSegundos($_SESSION['tiempoCompleto']);
      
$actividad mysql_query("UPDATE usuarios SET tiempo = '".$tiempo."' WHERE id = '".$_SESSION['idU']."'");
      if(
$_SESSION['tiempoSeccion'] > 0){
        
$cadena ereg_replace("[?]"""$_POST['url']);
        
$variables explode("&",$cadena);
        
$seccion explode("=",$variables[0]);
        
$funcion explode("=",$variables[1]);
        
$acceso "Menu";
        if(
$seccion[1] == "tips"){
            
$idCategoria explode("=",$variables[2]);
            if(
$funcion == "ver"){
               
$idPublicacion explode("=",$variables[3]);
            }
         }elseif(
$seccion[1] == "privilegios"){
            
$idPrivilegio explode("=",$variables[2]);
         }elseif(
$seccion[1] == "noticias"){
            
$idPublicacion explode("=",$variables[2]);
         }elseif(
$seccion[1] == "herramientas"){
            
$idHerramientas explode("=",$variables[2]);
         }
      
        
$consulta mysql_query("INSERT INTO actividad(idUsuario,idCategoria,acceso) VALUES ('".$_SESSION['idU']."','".$idCategoria[1]."','".$acceso."')");
      }
    }

Bien ahora el problema es que a veces me inserta los datos y a veces no, no se si sea porque tarda mas en ejecutarse la consulta que lo que tarda en ejecutarse el evento beforeunload. Alguna sugerencia de como puedo detener el evento beforeunload hasta que los datos en la BD sean insertados, o como puedo realizar correctamente el seguimiento del usuario que requiero. Espero me halla dado a entender, gracias.
  #2 (permalink)  
Antiguo 13/08/2012, 23:09
 
Fecha de Ingreso: mayo-2009
Mensajes: 242
Antigüedad: 15 años, 6 meses
Puntos: 2
Respuesta: Problema con beforeunload de jquery

La soución fue esta .... poner async: false en las opciones del ajax, lo que hace es esperar a que la funcion termine para continuar ...

Etiquetas: ajax, funcion, html, php
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:41.