Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/08/2012, 22:50
kriss8725
 
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.