Rechercher : dans
Par :

HELP plz ! Ajax javascript httprequest

Dernière réponse le 30 mai 2008 à 17:07:35 zek, le 30 mai 2008 à 09:13:42 
 Signaler ce message aux modérateurs

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>
Configuration: Linux
Firefox 3.0

Meilleures réponses pour « HELP plz ! Ajax javascript httprequest » dans :
AJAX (Asynchronous Javascript And XML) Voir Avantages liés à AJAx Les sites web utilisant AJAX bénéficient des avantages suivants : Une interface réactive car AJAX permet de modifier localement la page web ; Une rapidité d'exécution car seules les données à modifier dans la page sont...
Javascript - Librairies d'effets pour vos images VoirAu gré de vos explorations du web, vous avez vu de superbes effets de présentation des images. Et ça vous plairaît bien de pouvoir proposer les mêmes à vos visiteurs. Voici quelques solutions en Javascript couplées à des CSS. Elles sont plus...
Javascript - Modifier la hauteur (height) d'un élément HTML VoirPour modifier la hauteur d'un élément HTML en javascript, il suffit d'utiliser sa propriété de style "height". Pour cela vous pouvez y faire référence de la manière suivante : Si vous souhaitez connaître la hauteur (height) d'un bloc HTML, il...
Javascript - Connaître la hauteur d'un élément HTML VoirSi vous souhaitez connaître la hauteur (height) d'un bloc HTML en javascript, il existe deux façons selon les navigateurs : element.offsetHeight element.style.pixelHeight Ainsi, le code suivant permet d'obtenir la hauteur d'un bloc HTML...
AJAX (Asynchronous Javascript And XML) VoirIntroduction à AJAX AJAX (Asynchronous Javascript And XML, traduisez Javascript asynchrone et XML) est une méthode de développement web basée sur l'utilisation d'un script Javascript pour effectuer des requêtes web à l'intérieur d'une page web...
AJAX (Asynchronous Javascript And XML) VoirAvantages liés à AJAx Les sites web utilisant AJAX bénéficient des avantages suivants : Une interface réactive car AJAX permet de modifier localement la page web ; Une rapidité d'exécution car seules les données à modifier dans la page sont...
Javascript - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. En Javascript, les noms de variables peuvent être aussi long que l'on désire,...

1

Mimiste, le 30 mai 2008 à 10:09:57

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....
La sportivité commence là où le diesel s'arrête !
You can still watch this ? Wait until the Vtec kick in !

Répondre à Mimiste

2

zek, le 30 mai 2008 à 11:02:42

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

Répondre à zek

3

Mimiste, le 30 mai 2008 à 11:44:31

Ouai mais toute façon il arrivera forcement a 4 a un moment donné
La sportivité commence là où le diesel s'arrête !
You can still watch this ? Wait until the Vtec kick in !

Répondre à Mimiste

4

zek, le 30 mai 2008 à 11:49:59

Bah non justement.... en faite si je met une url fausse au depart a la place de google... et bien readyState s'arrete à 2...

Répondre à zek

5

PhP, le 30 mai 2008 à 13:49:19

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.
PhP  
Il y a 10 types de personnes dans le monde : ceux qui compre­nnent le binaire et les autres ...

Répondre à PhP

6

zek, le 30 mai 2008 à 14:17:05

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 ?

Répondre à zek

7

PhP, le 30 mai 2008 à 15:12:44

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

PhP  
Il y a 10 types de personnes dans le monde : ceux qui comprennent le binaire et les autres ...

Répondre à PhP

8

 zek27, le 30 mai 2008 à 17:07:35

Oua
merci Php fais 2 jours que je suis dessus xD
encore merci tu gere !!

Répondre à zek27
Collection CommentÇaMarche.net