Ajax (xmlhttprequest) + Safari + Autorefresh

Fermé
drjod Messages postés 5 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 26 décembre 2008 - 24 déc. 2008 à 17:26
drjod Messages postés 5 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 26 décembre 2008 - 26 déc. 2008 à 18:08
Bonjour,

je vous écris car j'ai présentement un gros probleme cela fait 3 jour que je cherche et essaie des truc et
je n'arrive a rien. donc je vous expose le probleme sur mon site web ( en passant je suis amateur en php et
encore plus en ajax lol ).... j'ai dans ma section HEADER qui s'actualise toute les secondes pour verifier s'il
y a des nouveaux messages ou des nouvelles demandes d'amis. Donc, j'utilise une fonction javascript pour
le refresh au secondes et une fonction ajax (xmlhttprequest ) le principe c'est que chargement du site. mes fonctions
se charge ( ne s'exécute pas mais se charge je dit bien). donc une fois que le DIV en question à été créer.
j'envoi une demende pour exécuter mon javascript. Comme sa j'ai mon actualisation d'un DIV, dans lequel est
inclu 2 recherche dans une base de donné MYSQL.

LE PROBLEME: seulement sur SAFARI, lorsque je laisse le site ouvert pendans environ 30 minutes jusqu'à 12heures.
hé oui! j'ai laissé le site rouler toute la nuit pour vérifier, j'étais un peu désesperer. Donc, lorsque après tout se temps
je clique sur quelconques liens dans mon site, la page ne change pas, et FREEZE dans le chargement en haut.
(dans la barre d'adresse)

je vous donne les scripts que j'utilise.
(j'ai modifier un peu mon envoie xmphttprequest pour tenter de contré se bug, mais rien n'y fait)
aucun probleme sur: Google Chrome, IE6, IE7, Firefox.

SCRIPT JAVASCRIPT ET AJAX:
<script type='text/javascript'> 
function getHTTPObject()
{
  var xmlhttp = false;


/* Compilation conditionnelle d'IE */ 
/*@cc_on 
@if (@_jscript_version >= 5) 
try 
{ 
xmlhttp = new ActiveXObject('Msxml2.XMLHTTP'); 
} 
catch (e) 
{ 
try 
{ 
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP'); 
} 
catch (E) 
{ 
xmlhttp = false; 
} 
} 
@else 
xmlhttp = false; 
@end @*/ 

  /* on essaie de créer l'objet si ce n'est pas déjà fait */
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined')
  {
     try
     {
        xmlhttp = new XMLHttpRequest();
        if (xmlhttp.overrideMimeType) 
{ 
//xmlhttp.overrideMimeType('text/xml'); 
xmlhttp.overrideMimeType('text/xml; charset=UTF-8'); 
} 
     }
     catch (e)
     {
        xmlhttp = false;
     }
  }

  if (xmlhttp)
  {
     /* on définit ce qui doit se passer quand la page répondra */
     xmlhttp.onreadystatechange=function()
        {
            if (xmlhttp.readyState == 4) /* 4 : état 'complete' */
            {
                if (xmlhttp.status == 200) /* 200 : code HTTP pour OK */
                {
                if(xmlhttp.responseText != '')
                    document.getElementById('top_new').innerHTML=xmlhttp.responseText;
           
          // alert(xmlhttp.responseText) // This returns null
                    }
            }
        }
    }
    return xmlhttp;
}

function rafraichir() {
        var xmlhttp = getHTTPObject();
        if(BrowserDetect.browser == 'safari'){
           xmlhttp.open('GET','include/cheking_new_mess.php',false);
        }else{
           xmlhttp.open('GET','include/cheking_new_mess.php',true);
        }
     
        xmlhttp.send(null);
        setTimeout('rafraichir()', 1000);
    }
    
    
</script> 


LANCEMENT DE MA FONCTION JAVASCRIPT RAFRAICHIR:

<script language='javascript'>
rafraichir();
</script>


PAGE PHP QUI EST RECHARGER:

<?php
session_start();
include('connect.php');
$mypseudo = $_SESSION['login'];
$message_count = mysql_query("SELECT mess_in.read FROM mess_in WHERE mess_in.to='".$mypseudo."' AND mess_in.read='0'")  or die(mysql_error()); 
$mess_count = 0;
 while ($donnees_message = mysql_fetch_array($message_count)) // On boucle pour afficher toutes les donnŽes
 {
 $mess_count++;
 }
/*
 if($_GET['updatels_m'] == 1){
if($mess_count != 0){
$mess_count=($mess_count-1);
}
}
*/
if($mess_count ==  0 OR $mess_count < 0 OR $mess_count == ''){
$mess_count1="<font color='white'>Aucun nouveau message</font>";
}else{
if($mess_count == 1){
$mess_count1="<font color='red'><u>$mess_count nouveau message</u></font>";
}elseif($mess_count > 1){
$mess_count1="<font color='red'><u>$mess_count nouveaux messages</u></font>";
}
}

$friends_demand_count = mysql_query("SELECT friends.ami_confirm FROM friends WHERE ami_2='".$mypseudo."' AND ami_confirm='0'"); 
$turn_friendsdemand_count = 0;
 while ($donnees_friendsdemand_count = mysql_fetch_array($friends_demand_count)) // On boucle pour afficher toutes les données
 {
 $turn_friendsdemand_count++;
 }
/*
if($_GET['updatels'] == 1){
if($turn_friendsdemand_count != 0){
$turn_friendsdemand_count=($turn_friendsdemand_count-1);
}
}
*/

if($turn_friendsdemand_count ==  "0"){
$turn_friendsdemand_count1="<a href='index.php?go=friends_control' class='nodeco'><font color='white'>Aucune nouvelle demande</font></a>";
}else{
if($turn_friendsdemand_count == "1"){
$turn_friendsdemand_count1="<a href='index.php?go=friends_control' class='nodeco'><font color='red'><u>$turn_friendsdemand_count nouvelle demande</u></font></a>";
}else{
$turn_friendsdemand_count1="<a href='index.php?go=friends_control' class='nodeco'><font color='red'><u>$turn_friendsdemand_count nouvelles demandes</u></font></a>";
}
}
?>
<a class='nodeco' href="http://macellule.com/inc_out/messagerie.php?folder=recus" onclick="return GB_showSendPrivateMess('Messagerie Interne...', this.href)">
<?php
echo"$mess_count1</a><br/>$turn_friendsdemand_count1";	


?>


Merci grandement pour votre aide.
jonathan.
A voir également:

4 réponses

drjod Messages postés 5 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 26 décembre 2008
24 déc. 2008 à 18:05
bonjour,

c'est toujours moi, je vien de penser que peut-être que c'est un probleme de cache.
a force de faire des refresh toute les secondes, le cache se rempli et lorsque je change de page
pu de place pour le cache et alors sa bug j'ai donc ajoute a ma page php qui est rafraichi se petit
bout de code:

echo"<META HTTP-EQUIV='Pragma' CONTENT='no-cache'>";


esperons que ce soit le probleme, je commence vraiment a désespérer.
Il n'y a pas aucun navigateur qui réponde de la même facon a toute les commandes ! :@
0
drjod Messages postés 5 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 26 décembre 2008
24 déc. 2008 à 18:50
finalement sa ne provient pas de la. je suis a deux pouce de tout laisser tomber, je trouve sa
***** de devoir tout refaire pour chaque navigateur, s'il repsecterait la norme W3C ! il y a
beaucoup de travail qui m'aurais prit 10 fois moin de temps !!!!.
0
drjod Messages postés 5 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 26 décembre 2008
24 déc. 2008 à 23:31
héhé je vien de trouver quelques chose......

Eviter le blocage du à une bande passante faible

Il suffit de bloquer la requette sur un setTimout:

t
imerAntiblocage=setTimeout(function () { xhr_object.abort();},5000);
if ( xhr_object.readyState == 4 ){
clearTimeout(timerAntiblocage);
} 



Exemple complexe avec PHP

Voici un script fonctionnel utilisé afin de lire un flux et l'afficher dans un div

function lire_ce_lien_dans_id(action,type,flux,id,racineid){
var xhr_object = null;
var position = racineid+id;
document.getElementById(position).innerHTML='<div align="center">en cours...</div>';
if(window.XMLHttpRequest) 
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject)
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else { 
alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
return;}
var sauvurl="module.php?action="+action+"&type="+type+"&flux="+flux;
timer=setTimeout(function () { xhr_object.abort();},10000);
xhr_object.open("GET", sauvurl, true);
xhr_object.setRequestHeader("Content-type", "charset=ISO-8859-15");
if(!document.all) xhr_object.overrideMimeType('text/html; charset=ISO-8859-15'); 
xhr_object.onreadystatechange = function(){
if ( xhr_object.readyState == 4 )
{
clearTimeout(timer);
document.getElementById(position).innerHTML = xhr_object.responseText; 
}
} 
xhr_object.send(null);
}




Peut-etre un lien avec mon probleme la ? mais si oui comment je l'incorpore ds mon script ? :)
0
drjod Messages postés 5 Date d'inscription mercredi 24 décembre 2008 Statut Membre Dernière intervention 26 décembre 2008
26 déc. 2008 à 18:08
[RESOLU]

j'ai finalement utiliser le cache meta et c'est regler merci a vous
0