Onunload: attendre la fin d'un echange ajax avnt de fermer la fenêtre?

Résolu
trygelin Messages postés 2 Date d'inscription mercredi 7 juin 2006 Statut Membre Dernière intervention 25 août 2009 - 25 août 2009 à 15:26
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 - 26 août 2009 à 13:21
Afin de fermer une session, lors de changement de page, ou fermeture du navigateur je souhaite déclencher une requete AJAX:
j'ai écrit la procédure ainsi:
<script language="javascript">
function stop(){
if(window.XMLHttpRequest){requete= new XMLHttpRequest();}
else{if (window.ActiveXObject){requete= new ActiveXObject("Microsoft.XMLHTTP");}}
var appel="Sources/deconnect.php";
requete.open("GET",appel,true);//ouverture requête AJAX
requete.send(null);
requete.onreadystatechange=function(){}
}
</script>
Sous FF pas de problème cela fonctionne correctement par contre sous IE ça ne marche pas lors de la fermeture de IE, IE plante avec le message suivant: "IEXPLORE.EXE a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru."

4 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
25 août 2009 à 16:41
Bonjour,

déjà, j'éviterais le nom "stop" pour la fonction
c'est peut-être un nom réservé par IE ?

ensuite, cette fonction est appelée quand ?
onbeforeunload du body semble bien

peut-être aussi
requete.open("GET",appel,false);
requete.send(null); ou requete.send(""); ???
/*requete.onreadystatechange=function(){} */
}

mais, pas de raison à priori (?)

requete= new XMLHttpRequest(); est aussi valable pour IE
quelle version de IE au fait ?

Cordialement [mon Site] [M'écrire] Bul
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
25 août 2009 à 17:40
ch'tiot exemple qui fonctionne sans soucis...

onbeforeunload.htm :
<html>


<script text=javascript">
window.onbeforeunload=function()
{ var xml=new XMLHttpRequest();
xml.open("get","onbeforeunload.php",false);
xml.send("");
alert(xml.responseText);
}
</script>
</html>

onbeforeunload.php :

<?php
echo 'tout va bien';
?>
0
trygelin Messages postés 2 Date d'inscription mercredi 7 juin 2006 Statut Membre Dernière intervention 25 août 2009
25 août 2009 à 22:44
Merci de votre aide
En effet j'appelai la fonction sur
document.onunload
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 16
26 août 2009 à 13:21
donc déjà rectifiez cela : ok.
mais
requete.open + requete.send + requete.onreadystatechange
ce n'est pas le bon ordre (!)
requete.onreadystatechange + requete.open + requete.send
ce sera plus sûr
et....
votre fonction stop() rend la main malgré tout !
sans rien attendre la fin de quoi que ce soit,
ça risque donc aussi de queuter dans certains cas.
0
Rejoignez-nous