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

ejecutar onunload con ajax

Estas en el tema de ejecutar onunload con ajax en el foro de Frameworks JS en Foros del Web. hola amigos recientemente me ayudaron a como enviar informacion de ajax a php gracias al amigo saruman http://www.forosdelweb.com/showthread.php?t=428747 lo que trato de hacer es que ...
  #1 (permalink)  
Antiguo 05/10/2006, 10:52
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta ejecutar onunload con ajax

hola amigos recientemente me ayudaron a como enviar informacion de ajax a php gracias al amigo saruman

http://www.forosdelweb.com/f127/variable-javascript-php-con-ajax-428747/

lo que trato de hacer es que cuando el usuario abandone el sistema al cerrar el navegador desde el boton cerrar se ejecute el proceso para borrar archivos temporales de un directorio en especifico..sera posible??

espero sus comentarios

saludos
__________________
gerardo
  #2 (permalink)  
Antiguo 05/10/2006, 13:36
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Pregunta amigos digamen si es correcto esto me funciono

Pero no se si es totalmente correcto
saludos
estes es el motor ajax que me paso el amigo saruman

se llamas ajax.js

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;
}

la pagina que carga es prueba.html es la que se ejecuta primero
se llama prueba.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script language="javascript" src="ajax.js" type="text/javascript"></script>
<title></title>


<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>

este es el php que borra una imagen
<?php
unlink('Dibujo.JPG');
?>

aparentemente funciono pero no se si es totalmente correcto
saludos

espero sus comentarios
__________________
gerardo
  #3 (permalink)  
Antiguo 05/10/2006, 14:45
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 17 años, 7 meses
Puntos: 0
Interesante esto de lanzar ajax con unload... no lo había pensado y se me ocurren muchas aplicaciones (casi todas de control de usaurios, tiempo en la pagina, etc...)

Me parece que es correcto (siempre y cuando el objeto xmlhttprequeste se pueda ejecutar con un unload) aunque tu alert no controla si se ejecutó ajaxo o no solo se lanza y ya está...

para poner un alert de control deberias tu función por esto para ver si funciona... si lo hace avisa que me intriga eso del ajax con el unload....
Código:
var miAjaxObj = MyAjax();
miAjaxObj.open("GET","borrar_temp.php",true);
miAjaxObj.onreadystatechange=function(){if (miAjaxObj.readyState==4){
if (miAjaxObj.status==200){alert("ejecutado");}}}
miAjaxObj.send(null);
La nueva linea lo que hace es definir una función que será la que se ejecute cuando haya conseguido cargar la URL con exito.
  #4 (permalink)  
Antiguo 05/10/2006, 14:49
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Sonrisa

ok men vamos a probar
ahorita te digo que paso

saludos
__________________
gerardo
  #5 (permalink)  
Antiguo 05/10/2006, 14:54
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
fijate que si funciona pero no me arroja el mensaje de alert
pero si invoca al php porque la imagen se borra ahora otro detalle
en firefox no corrio no ejecuto el php

que sera??
__________________
gerardo
  #6 (permalink)  
Antiguo 06/10/2006, 02:33
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 17 años, 7 meses
Puntos: 0
1) Tienes algun depurador de codigo javascript instalado?

Si no, en firefox herramientas hay uno... mirate a ver que no sea problema de agún punto y coma o alguna letra que falte... (escribo directamente n el foro no pruebo los codigos).

2) la página php que cargas no tiene nada no??? ... creo que debería contenr aunque fuese algo...

Podrías probar a que la página contubiese simplemente "Archivo borrado" (<? echo "Archivo borrado"; ?> )

Así en el codigo en vez de poner alert ("ejecutado") pondríamos...

Código:
if (miAjaxObj.status==200){alert(miAjaxObj.responseText);}}}
la propiedad responseText del onjeto xmlhttprequest contiene el texto cargado por ajax.


también podría ser que todo fuese problema de usar el unload que con firefox diese problemas
  #7 (permalink)  
Antiguo 06/10/2006, 09:23
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
me acabo de dar cuenta de algo el firefox y en explorer si me arroja el mensaje de alert cuando le doy refrescar pero si cierrro la ventana no arroja ningun mensaje pero en ie si ejecuta el proceso de borrar la imagen y en firefox no

saludos
__________________
gerardo
  #8 (permalink)  
Antiguo 06/10/2006, 13:11
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 17 años, 7 meses
Puntos: 0
Pues tiene pinta de que sea que el unload no se ejecuta siempre en firefox. Algo he leido buscando sobre este tema en google. Parece que si que hay problemas con firefox... habría que buscar otra forma de conseguirlo ya que es interesante la posibilidad...

a pensar!
  #9 (permalink)  
Antiguo 06/10/2006, 14:34
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
pero que chistoso con el metodo que hice si corre bien todo pero
claro como indicas no hay algo que me diga si se ejecuto bien

saludos
__________________
gerardo
  #10 (permalink)  
Antiguo 07/10/2006, 02:33
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 17 años, 7 meses
Puntos: 0
cito:

"pero en ie si ejecuta el proceso de borrar la imagen y en firefox no"

De ahi entiendo que firefox NO está borrando tu imagen... no?

Lo siento pero como eres de mexico y yo de españa me cuesta enteder algunas frases. Hasta ahora he entendido que en explorer no te da ningun problema.

es decir, te lanza un alert con el contenido de tu php (quie deberías haberlo cambiado) y borra la imagen puesto que lo ha ejecutado.

En firefox me cuentas que no lanza el alert pero tampoco borra la imagen... Entonces, es que en firefox no te está funcioanndo no???

O antes de meter el alert ahí donde lo hemos metido ahora si que borraba la imagen??? (eso si que me dejaría de piedra...)

Lo que yo he ido leyendo de firefox es precisamente que los eventos onunload solo los ejecuta a) cuando refrescas o cierras por teclado y b) cuando cierras por un link que ejecute javascript. Al cerrar con la x he leido por ahí varios foros que dicen que firefox no ejecuta el onunload.

Peroahora me dices que antes si que se ejecutaba bien todo... eso no me cuadra... Al meter el alert donde lo hemos metido lo unico que hacemos es decirle:

- Cuando acabes de cargar la pagina con ajax ejecuta un alert con su contenido. Si realmente ha conseguido cargar la pagina y por tanto borrar el archivo porque no iba a ponerte el alert????

- A no ser que por circustancias de la vida al cerrar pagina le de tiempo a ejecutar ajax pero no su onstatechange (algo que ya si que seria raro).

Confirmame si realmente sin la linea añadida te borraba el archivo firefox
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 14:47.