HELP plz ! Ajax javascript httprequest
zek
-
zek27 Messages postés 7 Statut Membre -
zek27 Messages postés 7 Statut Membre -
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:
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>Configuration: Linux Firefox 3.0
7 réponses
-
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....
-
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 ^^ -
bah non justement.... en faite si je met une url fausse au depart a la place de google... et bien readyState s'arrete à 2...
-
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. -
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 ?
-
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()
-
oua
merci Php fais 2 jours que je suis dessus xD
encore merci tu gere !!