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
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
A voir également:
- HELP plz ! Ajax javascript httprequest
- Telecharger javascript - Télécharger - Langages
- Afficher un tableau javascript en html ✓ - Forum Javascript
- Node.js javascript runtime virus ✓ - Forum Virus
- Erreur #125 javascript - Forum Mozilla Firefox
- A javascript error occurred in the main process - Forum Handicap / Accessibilté
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
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....
{
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 ^^
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
30 mai 2008 à 11:44
Ouai mais toute façon il arrivera forcement a 4 a un moment donné
bah non justement.... en faite si je met une url fausse au depart a la place de google... et bien readyState s'arrete à 2...
PhP
Messages postés
1770
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
606
30 mai 2008 à 13:49
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.
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 ?
PhP
Messages postés
1770
Date d'inscription
lundi 11 décembre 2000
Statut
Membre
Dernière intervention
23 décembre 2009
606
30 mai 2008 à 15:12
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
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()
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
30 mai 2008 à 17:07
oua
merci Php fais 2 jours que je suis dessus xD
encore merci tu gere !!
merci Php fais 2 jours que je suis dessus xD
encore merci tu gere !!