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

AJAX Discussion :

[AJAX] impossible de recevoir deux fois


Sujet :

AJAX

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut [AJAX] impossible de recevoir deux fois
    Bonjour,
    Une question me trottine dans la tête.(c'est juste a but informatif et absolument pas urgent)
    si je met ce code :
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" style="background-color:white">
    	<head>
    		<title></title>
    	</head>
     
    	<script language="javascript" >
    	var xhr=null;
    	try
    	{
    		xhr=new XMLHttpRequest
    	}
    	catch(ev)
    	{
    		try
    		{
    			xhr=new ActiveXObject("Msxml2.XMLHTTP");
    		}
    		catch(ev2)
    		{
    			try 
    			{
    				xhr=new ActiveXObject("Microsoft.XMLHTTP");
    			}			
    			catch(ev3)
    			{
    				alert("attention ca va exploser!!!!!!");
    			}
    		}
    	}
    	if(xhr!=null)
    	{	
    		xhr.onreadystatechange=function()
    		{
    			alert(xhr.readyState);
     
    		}
    		function envoyer()
    		{
    			xhr.open("GET","mapage.xml",true);
    			xhr.send("null");
    		}
    	}
     
    		</script>
    		<body>
    		<input type="Submit" value="envoyer" onClick="envoyer()" />
    		</body>
     
    		</html>
    et que je clique sur le bouton envoyer la fonction alert() se manifeste bien à chaque changement d'état comme le prévoit le code.
    Donc ça donne respectivement 1,2,3,4 et 1 : bon je ne comprends pas pourquoi le dernier état est 1 et pas 0 mais pour le moment pas d'importante^^.
    Si maintenant, après avoir vu les 5 alert(), je reclique sur le bouton envoyer, là rien ne se passe (je m'attendais à ce qu'il m'affiche à nouveau les alert() mais non : bon alors il ne change donc pas d'état).
    pouvez vous m'expliquer pourquoi?

    Vu que le dernier état est 1, j'en conclu qu'il est pas nécessaire de rappeller la fonction open() appelé par la fonction envoyer elle meme appelé quand je clique sur envoyer(c'est bon plus rien n'appelle quoi que ce soit)
    je l'ai donc mis sous une condition:
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" style="background-color:white">
    	<head>
    		<title></title>
    	</head>
     
    	<script language="javascript" >
    	var xhr=null;
    	try
    	{
    		xhr=new XMLHttpRequest
    	}
    	catch(ev)
    	{
    		try
    		{
    			xhr=new ActiveXObject("Msxml2.XMLHTTP");
    		}
    		catch(ev2)
    		{
    			try 
    			{
    				xhr=new ActiveXObject("Microsoft.XMLHTTP");
    			}			
    			catch(ev3)
    			{
    				alert("attention ca va exploser!!!!!!");
    			}
    		}
    	}
    	if(xhr!=null)
    	{	
    		xhr.onreadystatechange=function()
    		{
    			alert(xhr.readyState);
     
    		}
    		function envoyer()
    		{
    			if(xhr.readyState!=1)
    			{
    				xhr.open("GET","mapage.xml",true);
    			}			
    			xhr.send("null");
    		}
    	}
     
    		</script>
    		<body>
    		<input type="Submit" value="envoyer" onClick="envoyer()" />
    		</body>
     
    		</html>
    mais rien ne change
    auriez vous une solution?

    merci d'avance(en espérant n'avoir pas fait trop de faute...)

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Quel navigateur utilises tu ? Car IE est connu pour ce type de souci.

    ERE

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut
    merci pour la réponse.
    En faite j'utilise le navigateur iceweasel sous linux.
    Suite à ton post j'ai testé mon script sous firefox et internet explorer (tous les deux sous windows) mais ces deux derniers me donne toujours le même problème.

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Re,

    Par curiosité j'ai repris les specs du W3C pour XMLHttpRequest et du coup cela m'a rappelé qu'il y a quelques mois j'avais lu le source de l'objet chez Mozilla.

    Quand tu fais un open un flag SEND est armé à FALSE; pour prévenir un second envoi en mode asynchrone, ce flag passe à true dès que la fonction send est appelée. Or une fois que la requête est achevée, ce flag ne repasse pas à false, alors que l'état revient à OPEN (1). Donc au moment d'appeler une seconde fois send , il y a vérification du flag SEND qui est à true et

    L'idéal, c'est de fabriquer un objet à chaque utilisation...

    ERE

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    174
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 174
    Points : 74
    Points
    74
    Par défaut
    je viens de relire la w3c et en effet il y a cette histoire de flag.
    Donc j'ai bidouiller un peu mon code pour que l'objet se recréé à nouveau en créer une fonction pour obtenir l'objet et en effet ça marche bien.
    Pour ceux que ça intéressent sa donnerait ça:
    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
     
    	<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" style="background-color:white">
    	<head>
    		<title></title>
    	</head>
     
    	<script language="javascript" >
    	var xhr=null;
    	function getXMLObject()
    	{
    		try
    		{
    			xhr=new XMLHttpRequest
    		}
    		catch(ev)
    		{
    			try
    			{
    				xhr=new ActiveXObject("Msxml2.XMLHTTP");
    			}
    			catch(ev2)
    			{
    				try 
    				{
    					xhr=new ActiveXObject("Microsoft.XMLHTTP");
    				}			
    				catch(ev3)
    				{
    					alert("attention ca va exploser (lol j'adore cette erreur^^)!!!!!!");
    				}
    			}
    		}
    		if(xhr!=null)
    		{	
    			xhr.onreadystatechange=function()
    			{
    				alert(xhr.readyState);
    				if(xhr.readyState==4)
    				{
    					getXMLObject();
    				}
     
    			}
    		}
    	}
    	getXMLObject();
    	function envoyer()
    	{
    		xhr.open("GET","mapage.xml",true);
    		xhr.send("null");
    	}
     
     
    		</script>
    		<body>
    		<input type="Submit" value="envoyer" onClick="envoyer()" />
    		</body>
     
    		</html>
    bon je trouve que ça fait pas très organisé comme code(surtout qu'a l'interieur de ma fonction getXMLObject() je fait un appel à cette fonction^^) donc je vais voir si je ne peux pas changer directement le flag de send() et organiser un peu mieux mon code

    merci beaucoup pour ton aide emmanuel.remy

  6. #6
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Re,

    Généralement ce qui est fait c'est une fonction getXHR() qui renvoie une nouvelle instance de objet.

    Et puis c'est tout...

    ERE

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impossible de compiler deux fois
    Par chaospat dans le forum Autres éditeurs
    Réponses: 19
    Dernier message: 25/02/2016, 05h46
  2. Ajax: recharge deux fois la page
    Par kohan95 dans le forum jQuery
    Réponses: 1
    Dernier message: 24/04/2010, 11h14
  3. AJAX Triggers se lancent deux fois
    Par akaii dans le forum VB.NET
    Réponses: 3
    Dernier message: 24/03/2010, 00h37
  4. Réponses: 2
    Dernier message: 21/08/2008, 00h09
  5. [AJAX] Impossible d'envoyer deux fois la même phrase.
    Par D_ident_1 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/07/2007, 20h26

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