HELP plz ! Ajax javascript httprequest
zek
-
zek27 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
zek27 Messages postés 7 Date d'inscription Statut Membre Dernière intervention -
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>
A voir également:
- HELP plz ! Ajax javascript httprequest
- Telecharger javascript - Télécharger - Langages
- A javascript error occurred in the main process - Forum Windows
- A javaScript error occurred in the main process - Forum Handicap / Accessibilté
- Afficher un tableau javascript en html ✓ - Forum Javascript
- Erreur #125 javascript - Forum Mozilla Firefox
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....
{
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 ^^
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.
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
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()
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()