HELP plz ! Ajax javascript httprequest

Fermé
zek - 30 mai 2008 à 09:13
zek27 Messages postés 7 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 6 juin 2008 - 30 mai 2008 à 17:07
Bonjour, Voila j'ai un petit soucie... Je debute en codage javascript, ajax... J'aimerais creer une page que quand je la demarre,
il y a une requete qui regarde si le site internet est accessible ( url bonne)
si oui
sa m'envoi sur le site
sinon
sa m'envoi sur une page que j'ai en local.
Il faut obligatoirement que sa fonctionne sous mozilla.
j'arrive a faire en sorte d'aller sur le site internet mais pas sur la page local ...
Mon soucie viens au niveau du readyState.. faudrais qu e je fasse en sorte que si readyState se bloque avant 4 sa m'envoi sur la page local... en esperant que vous pourrez m'aider ! merci d'avance.
voici le code:
<html> <head> <title>TEST</title> 
<script> 
function Initialize() 
{ 
   try{
          req=new ActiveXObject("Msxml2.XMLHTTP"); 
       } 
       catch(e) { 
                      try{ 
                          req=new ActiveXObject("Microsoft.XMLHTTP"); 
                          } 
                         catch(oc){ 
                                  req=null;
                           }
                      } 
         if(!req&&typeof XMLHttpRequest!="undefined") 
         { 
                  req=new XMLHttpRequest(); 
         } 
} 

function Eror() 
{ 
           location.href='page_interne.html'; 
           sleep(1000); 
} 

function Process() 
{ 
         if (req.status == 0) 
         { 
                  if(req.responseText!="") 
                  { 
                                    var data = req.responseText; 
                                    location.href='http://www.google.fr'; 
                                    sleep(1000); 
                  } 
          } 
          else{ 
                    alert('Erreur de status'); 
          } 
} 

function SendQuery() 
{ 
        Initialize(); 
        var url="https://www.google.fr/?gws_rd=ssl"; 
     
        if(req!=null) 
        { 
                req.onreadystatechange = function() 
               { 
                        if(req.readyState == 4) 
                        { 
                                  Process(); 
                        } 
                } 
               req.open("GET", url, true); 
               req.send(null); 
          } 
} 

function BodyLoad() 
{ 
             SendQuery(); 
} 

</script></head>
<body onload="BodyLoad();"> 
</body> 
</html>
A voir également:

7 réponses

Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
30 mai 2008 à 10:09
if(req.readyState == 4 && req.status == 200)
{
Process();
}
else
{
Eror();
}

le status prend les valeurs

200 si la page est dispo

404 si non trouvé

503 si indisponible

etc....
0
cela ne fonctionne pas.... car en faite si je met cela.
le else se lancera bien avant qu'il arrive à 4 et donc si la page est disponible il enverras sur le local quand meme car il passe à 1 2 3 avant 4... faudrais que j'arrive a faire que si readyState reste bloquer avan 4 j'envoi sur le local...mais je sais pas si c'est possible.
mais merci quand meme ^^
0
Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
30 mai 2008 à 11:44
Ouai mais toute façon il arrivera forcement a 4 a un moment donné
0
bah non justement.... en faite si je met une url fausse au depart a la place de google... et bien readyState s'arrete à 2...
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
30 mai 2008 à 13:49
Bjr

ben oui c'est normal ! si pour une raison ou pour une autre ta requête AJAX ne peut être exécutée, readyState ne prendra jamais la valeur 4 ... 4 c'est lorsque tout s'est déroulé correctement

Pour palier à ce problème j'associe systèmetiquement un timer avec setTimeout à chacune de mes requêtes avec un délai paramètrable (60 secondes en général). J'initialise le timer lors du req.send() et je l'annule lorsque readyState passe à la valeur 4 : dans ce cas la fonction associée à mon timer n'est jamais exécutée. Par contre si au bout de 60 secondes ,par ex, readyState n'est pas passé à 4 alors je déclenche une erreur de Timeout et j'annule la requête AJAX
et bien sûr j'avertis l'utilisateur et/ou j'appelle une procédure Javascript.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oki Php donc moi faudrais que je fasse un timer qui s'annule au bout d'un moment si readyState est pas passer a 4 et ensuite au lieu d'avertir l'utilisateur, je renvoi sur la page local ... pour stop un timer c'est killtimer aussi ?
0
PhP Messages postés 1767 Date d'inscription lundi 11 décembre 2000 Statut Membre Dernière intervention 23 décembre 2009 606
30 mai 2008 à 15:12
hum autant pour moi Mimiste a vu juste on passe quand même en readyState 4 dans certains cas même si la réquête échoue. Par ex normalement on ne peut pas appeller une page via AJAX hors de son domaine : https://www.google.fr/?gws_rd=ssl n'est pas autorisé sauf depuis le serveur de Google Mais dans ce cas le status retourné n'est pas égal à 200

J'ai adpaté un peu ton code


<html> <head> <title>TEST</title> 
<script> 
var timerID=null;
var timeOutError = false;
var req=null;

function Initialize() 
{ 
   try{
          req=new ActiveXObject("Msxml2.XMLHTTP"); 
       } 
       catch(e) { 
                      try{ 
                          req=new ActiveXObject("Microsoft.XMLHTTP"); 
                          } 
                         catch(oc){ 
                                  req=null;
                           }
                      } 
         if(!req&&typeof XMLHttpRequest!="undefined") 
         { 
                  req=new XMLHttpRequest(); 
         } 
} 

function Eror() 
{ 
           location.href='page_interne.html'; 
           sleep(1000); 
} 

function Process() 
{ 

		
		if (timerID != null) 
		{
			window.clearTimeout(timerID);
			timerID = null;
		}
			
		if (timeOutError)	
		{
			return;
		}	
		
         if (req.status == 200) 
         { 
                  if(req.responseText!="") 
                  { 
                                    var data = req.responseText; 
                                    location.href='http://www.google.fr'; 
                                    sleep(1000); 
                  } 
          } 
          else{ 
                    alert('Erreur de status'); 
          } 
} 

function SendQuery() 
{ 
        Initialize(); 
        var url="https://www.google.fr/?gws_rd=ssl"; 
     
        if(req!=null) 
        { 
                req.onreadystatechange = function() 
               { 	
		   
                        if(req.readyState == 4) 
                        { 
                                  Process(); 
                        } 
                } 
               req.open("GET", url, true); 
               req.send(null);
			   
			   // Appel de la fct TimeOut() au bout de 60"
			   timeOutError = false;
			   timerID = window.setTimeout("TimeOut()",60000);	
          } 
} 

function BodyLoad() 
{ 
             SendQuery(); 
} 

function TimeOut()
{
	timeOutError = true;
	// Interromp la requête
	if (req && req.readyState != 4)
	{
		req.abort();
	}


	alert('Echec de la requête AJAX');
	timerID = null;
	
}

</script></head>
<body onload="BodyLoad();"> 
</body> 
</html>

note que j'ai remplacé if (req.status == 0) par if (req.status == 200)

maintenant lorsque tu remplaces http://www.google.fr par http://www.google.ff
et bien le TimeOut se déclenche

Pour tester remplacer 60000 par 5000 par ex dans .setTimeout()
0
zek27 Messages postés 7 Date d'inscription vendredi 30 mai 2008 Statut Membre Dernière intervention 6 juin 2008
30 mai 2008 à 17:07
oua
merci Php fais 2 jours que je suis dessus xD
encore merci tu gere !!
0