IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Comment ça marche ajax.onreadystatechange


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut Comment ça marche ajax.onreadystatechange
    Bonjour

    Sur ce poste http://www.developpez.net/forums/d54...ce-javascript/ j'ai découvert une méthode pour interroger un site web.

    Par contre, je suis maintenant comme une poule qui a trouvé un couteau.
    je n'arrive pas à récupérer les valeurs une fois la réponse reçue. Je ne peux voir le contenu que dans la function où je récupère la valeur, si j'obtiens systématiquement Undifined

    Il doit surement y avoir une grosse bétise mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    	<script language="JavaScript">
     
    	var ajax = null;
    	var reponse = new Array();
     
    	var browser = navigator.appName;
    	if (browser == "Microsoft Internet Explorer")
    		 { ajax = new ActiveXObject("Microsoft.XMLHTTP"); }
    	else { ajax = new XMLHttpRequest(); }
    	var reponse = new Array();
     
    	function recevoirReponse(){
    		switch(ajax.readyState) {
    			case 0:
    			case 1:      	//ouverture de la communication
    					break;
    			case 2:        	//envoi de la requête
    					break;
    			case 3:         //réception des données
    					break;
    			case 4:
    				//données arrivées
    				//ajax.status contient 200, 404, ...
    				//ajax.statusText contient OK, NOT FOUND, ...
    				reponse["texte"] = ajax.responseText;
    				reponse["status"] = ajax.status;
    				reponse["statusTexte"] = ajax.statusText;
     
    			break;	
    		}
    	}	
     
    	function requeteGet (SiteWeb) {
    		ajax.open('get', SiteWeb);
    		ajax.onreadystatechange = recevoirReponse;
    		ajax.send(null);
    		alert (reponse["statusTexte"]);
    	}
         </script>
    que j'appelle comme ça pour le moment dans mon body

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <body>
    	<h1>Bonjour</h1>
     
    	<script language="JavaScript">
    		requeteGet ("http://www.google.fr");
    	</script>
     
    </body>
    </html>
    Si je mets mon alert dans la fonction recevoirreponse, tout va bien !
    Pourtant mes variables sont à priori bien déclarées ???

    Comprends pô

    D'avance merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    ton alert mets le dans la fonction que tu appelles sur le status 4 ...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Merci

    C'est bien ça mon problème, je voudrais pouvoir stocker une trace du résultat pour pouvoir l'utiliser après et je n'y arrive pas.

    je voudrais faire une fonction qui me permette de confirmer ou non la disponibilité d'un site web ?

    Y a pas un moyen pour garder une variable globale ?

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par muppetshow Voir le message
    Y a pas un moyen pour garder une variable globale ?
    Oui, en la déclarant dans le contexte global ou avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    window.mavariable = mavaleur;
    dans le contexte d'une fonction.

    En revanche, là où ce que tu veux n'est pas possible, c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requeteGet ("http://www.google.fr");
    Fais une recherche sur le Same Origin Policy...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Merci Bovino,

    Il me semblait que ma variable reponse était déclarée en globale et de ce fait pouvait recevoir une valeur n'importe où dans mon code ???

    Pour la deuxième partie de ta réponse, j'ai pas tout compris
    Mais bon, je vais fouiller ...

    Merci

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    je ne comprends pas ????
    J'ai l'impression que ma variable se comporte comme un bon vieux pointeur de ma jeunesse, qui change d'état en même temps que la variable ?
    Ca correspond à ça ?

    Mes variables sont bien définies dans mon head et rien n'y fait

    Voici mon dernier source complet de test si jamais il y avait une grosse connerie que je ne voyais pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    	<title>test</title>
     
    	<script language="JavaScript">
     
    	var ajax = null;
    	var reponse = new Array();
     
    	var browser = navigator.appName;
    	if (browser == "Microsoft Internet Explorer")
    		 { ajax = new ActiveXObject("Microsoft.XMLHTTP"); }
    	else { ajax = new XMLHttpRequest(); }
     
    	function recevoirReponse(){
    		switch(ajax.readyState) {
    			case 0:
    			case 1:      	//ouverture de la communication
    					break;
    			case 2:        	//envoi de la requête
    					break;
    			case 3:         //réception des données
    					break;
    			case 4:
    				//données arrivées
    				//ajax.status contient 200, 404, ...
    				//ajax.statusText contient OK, NOT FOUND, ...
    				reponse["status"] = (ajax.statusText == "OK");
    				// reponse["status"] = ajax.status;
    				// reponse["statusTexte"] = ajax.statusText;
    				// reponse["texte"] = ajax.responseText;
     
     
    			break;	
    		}
    	}	
     
    	function requeteGet (SiteWeb) {
    		ajax.open('get', SiteWeb);
    		ajax.onreadystatechange = recevoirReponse;
    		ajax.send(null);
    		alert (reponse["status"]);
    	}
     
     
    	function siteOK () {
    		var text = "cats make great pets for the home";
    		if (text.indexOf("pet") > -1) {
    			alert("We have a match!"); }
    		else { alert("No match found."); }
    	}
     
              </script>
     
    </head>
     
    <body>
    	<h1>Bonjour</h1>
     
    	<script language="JavaScript">
    		requeteGet ("http://www.google.fr");
    	</script>
     
    </body>
    </html>
    D'avance merci.

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function requeteGet (SiteWeb) {
    		ajax.open('get', SiteWeb);
    		ajax.onreadystatechange = recevoirReponse;
    		ajax.send(null);
    		alert (reponse["status"]);
    	}

    Tu fais une requête asynchrone, donc lorsque tu fais le alert, la réponse n'est pas encore arrivée et la valeur n'a donc pas pu être mise à jour
    D'où :
    Citation Envoyé par SaceFrog
    ton alert mets le dans la fonction que tu appelles sur le status 4 ...
    Autre détail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reponse = new Array();
    Les tableaux associatifs n'existent pas en JavaScript, tableau n'est donc pas un Array mais un Object.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup Bovino,
    Ca y est, moi avoir compris ... j'étais comme Mr Jourdain
    Par contre je suis étonné parce que mes tableaux fonctionnent bien comme je faisais avant merci pour l'info quand même


    J'ai donc corrigé, ça fonctionne mais pour un seul.
    J'ai essayé avec des tableaux un peu dans tous les sens, je n'arrive pas à enchainer les vérifs et récupérer les résultats respectifs (je fais un moniteur de disponibilité sur un lan avec machines, fichiers, serveurs web etc).

    J'ai aussi essayé en synchrone, et là j'obtiens un erreur accès refusé lors de mon 2nd passage sur ma ligne dans la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    function checkSiteWeb (urlAChecker) {
    	var ajax = null;
     
    	if (browser == "Microsoft Internet Explorer")
    		{ ajax = new ActiveXObject("Microsoft.XMLHTTP"); }
    	else { ajax = new XMLHttpRequest(); }
     
    	ajax.open ("GET", urlAChecker, false);
    	ajax.send(null);
    	return ((ajax.readyState == 4) && (ajax.statusText) == "OK");
    	}
    je vais continuer de fouiller pour voir s'il y a des limitations etc mais si qqun a une info ... je suis preneur.

    Merci beaucoup !!!

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par Bovino Voir le message
    En revanche, là où ce que tu veux n'est pas possible, c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    requeteGet ("http://www.google.fr");
    Fais une recherche sur le Same Origin Policy...
    http://lmgtfy.com/?q=Same+Origin+Policy

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 101
    Points : 54
    Points
    54
    Par défaut
    Désolé Bovino mais je ne comprends pas ce que tu veux me dire.
    D'autant moins que ma fonction marche pour http://www.google.fr

    Merci quand même.

Discussions similaires

  1. ToAsciiEx, comment cela marche ?
    Par mikyfpc dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/02/2004, 21h39
  2. [MFC] list box : comment ça marche
    Par runn2 dans le forum MFC
    Réponses: 4
    Dernier message: 28/01/2004, 12h36
  3. [SYNEDIT] -> Comment ça marche ?
    Par MaTHieU_ dans le forum C++Builder
    Réponses: 2
    Dernier message: 18/01/2004, 19h11
  4. [TP][Turbo Vision] comment ça marche ??
    Par Costello dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 05/08/2003, 00h24
  5. [update][req. imbriquee] Comment ca marche ??
    Par terziann dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2003, 12h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo