Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Ajax + Php en evento OnUnLoad

Estas en el tema de Ajax + Php en evento OnUnLoad en el foro de Frameworks JS en Foros del Web. Buenas os cuento lo que me paso y lo que quiero lograr... tengo una tabla de sesiones donde almaceno la informacion relativa a las sesiones(ids, ...
  #1 (permalink)  
Antiguo 27/03/2009, 06:53
 
Fecha de Ingreso: marzo-2006
Mensajes: 230
Antigüedad: 18 años, 9 meses
Puntos: 2
Ajax + Php en evento OnUnLoad(Casi Funciona)

Buenas os cuento lo que me paso y lo que quiero lograr...

tengo una tabla de sesiones donde almaceno la informacion relativa a las sesiones(ids, usuario, tiempodeinicio, tiempodefinal). Al entrar en la aplicacion todos esos datos se guardan en la tabla datos, luego lo que quiero es que tiempodefinal se me actualize en la base de datos, cada vez que haga un onUnLoad, pero claro la unica forma es hacerlo con un window.open y se me mostraria la ventanita aunque no mostrase nada por pantalla. Con Ajax se podria solucionar este problema??

De momento tengo este codigo:

ajax.js
Código PHP:
function MyAjax() {
var 
xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (
e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (
E) {
xmlhttp false;
}
}

if (!
xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}

return 
xmlhttp;
}

function 
ClearHTML(sHTML) {
sHTML sHTML.replace(/<[^>]*>/gi"");
sHTML sHTML.replace( /n/gi"") ;
sHTML sHTML.replace(/&nbsp;/gi"");

return 
sHTML;

borrar_temp.php
Código PHP:
<?
session_start
();
require_once(
"inc/functions.inc.php");
require_once(
"inc/sections.inc.php");
require_once(
"inc/conection.inc.php");

$Hoy=date("Y-m-d")." ".date("H:m:s");
$sql="update sesiones set session_destroy='".$Hoy."' WHERE session_id='".$_SESSION['IdSession']"'";
echo 
"<scrypt type='text/javascript'>alert('Ok');</script>";
mysql_query($sql);
session_destroy();


?>
principal.php
Código PHP:

<html>

<
head><script language="javascript" src="js/ajax.js" type="text/javascript"></script>
<script language="Javascript" type="text/javascript">
//Función para guardar tu informacion en bd utilizando ajax.
function cargarContenido()
{
var miAjaxObj = MyAjax();
miAjaxObj.open("GET","borrar_temp.php",true);
miAjaxObj.send(null);
alert("ejecutado");
}
</script></head>

<body onunload="cargarContenido();"></body>
</html> 
El alert que pone ejecutado lo hace, pero en la parte de PHP no hace nada de nada, ni el query ni el alert!!!

Saludos

Última edición por utopiko; 01/04/2009 a las 05:00 Razón: Cambio titulo
  #2 (permalink)  
Antiguo 27/03/2009, 08:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Ajax + Php en evento OnUnLoad

Lamentablemente el evento onUnload del browser no es tan bueno y aunque tu hagas el request ahí es probable que no se ejecute.

La mejor opción es usando window.open, ya que con eso garantizas que al menos se haga el request y se cierre la ventana.

Saludos.
  #3 (permalink)  
Antiguo 27/03/2009, 10:08
 
Fecha de Ingreso: marzo-2006
Mensajes: 230
Antigüedad: 18 años, 9 meses
Puntos: 2
Respuesta: Ajax + Php en evento OnUnLoad

Jo pero el window.open me saca la ventanita y los usuarios como vean que se abren ventanitas se acojonan. Ademas los bloqueadores de popup me lo bloquearian no?
  #4 (permalink)  
Antiguo 27/03/2009, 12:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Ajax + Php en evento OnUnLoad

Así es, lamentablemente no hay forma de cambiar esa configuración (desde el server) por lo que vas a tener que ver otra forma de hacerlo o implantarlo a lo mejor calcular la diferencia entre el tiempo que abren en cada pagina.

Saludos.
  #5 (permalink)  
Antiguo 30/03/2009, 01:32
 
Fecha de Ingreso: marzo-2006
Mensajes: 230
Antigüedad: 18 años, 9 meses
Puntos: 2
Respuesta: Ajax + Php en evento OnUnLoad

He leido en otras paginas y en otros hilos que esto mismo que yo pretendo es posible...Pero nada ni con onUnload, ni con onBeforeUnload!!!

Nadie lo ha hecho funcionar??

Gator no estoy dudando de ti, simplemente es lo que he leido...De hecho todas las soluciones que me has dado hasta ahora aqui y en otro hilos estan geniales
  #6 (permalink)  
Antiguo 01/04/2009, 05:03
 
Fecha de Ingreso: marzo-2006
Mensajes: 230
Antigüedad: 18 años, 9 meses
Puntos: 2
Respuesta: Ajax + Php en evento OnUnLoad

Aver chicos(sobr todo GatorV), estuve probando cosillas y resulta que en la lista de distribucion de Firefox me pasaron un codigo que funciona de lujo con el onunload.
Código PHP:
// t.php
<?php

$q 
= @$_GET['q'];
if(empty(
$q)) die(0);
$fp fopen('a.txt'"w");
fwrite($fp$q);
fclose($fp);

?>

// index.html
<html>

<head><script language="javascript" type="text/javascript">
       function MyAjax() {
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}

return xmlhttp;
}

function ClearHTML(sHTML) {
sHTML = sHTML.replace(/<[^>]*>/gi, "");
sHTML = sHTML.replace( /\n/gi, "") ;
sHTML = sHTML.replace(/&nbsp;/gi, "");

return sHTML;
}
       </script>
<script language="Javascript" type="text/javascript">
//Función para guardar tu informacion en bd utilizando ajax.
function cargarContenido()
{
var miAjaxObj = MyAjax();
miAjaxObj.open("GET","t.php?q=" + new Date(),true);
miAjaxObj.send(null);
alert("ejecutado");
}

</script></head>

<body onunload="cargarContenido();">
</body>
</html>
Crea el archivo a.txt con la fecha y la hora, cada vez que se hace un onunload y lo hace de puñetera madre!!El problema es que mi codigo con el update sql no lo hace hay alguna razon para ello??Es decir hay alguna razon para que AJAX interprete bien un codigo de PHP y otro no?
  #7 (permalink)  
Antiguo 01/04/2009, 10:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Ajax + Php en evento OnUnLoad

Puede ser varias cosas una de ellas el tiempo, es más tardado el hacer consultas a la bdd que escribir en un archivo, es por eso mi comentario de que no es garantizable, inclusive en diferentes versiones de exploradores de diferentes maquinas varia el resultado.

Saludos.
  #8 (permalink)  
Antiguo 15/02/2010, 10:09
 
Fecha de Ingreso: enero-2010
Mensajes: 62
Antigüedad: 14 años, 11 meses
Puntos: 1
Respuesta: Ajax + Php en evento OnUnLoad

hola, quize utilizar su mismo codigo para el evento onclick pero solo ejecuta el mensaje de alerta y no el codigo php u.u
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 13:29.