Posez votre question Signaler

HELP plz ! Ajax javascript httprequest

zek - Dernière réponse le 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="http://google.fr"; 
     
        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>
Lire la suite 

HELP plz ! Ajax javascript httprequest »

8 réponses
Réponse
+0
moins plus
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....
Ajouter un commentaire
Réponse
+0
moins plus
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 ^^
Mimiste- 30 mai 2008 à 11:44
Ouai mais toute façon il arrivera forcement a 4 a un moment donné
Ajouter un commentaire
Réponse
+0
moins plus
bah non justement.... en faite si je met une url fausse au depart a la place de google... et bien readyState s'arrete à 2...
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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 ?
Ajouter un commentaire
Réponse
+0
moins plus
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 : http://www.google.fr 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="http://google.fr"; 
     
        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()
Ajouter un commentaire
Réponse
+0
moins plus
oua
merci Php fais 2 jours que je suis dessus xD
encore merci tu gere !!
Ajouter un commentaire
Ce document intitulé « HELP plz ! Ajax javascript httprequest » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?