Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Flash/Flex > Flash > AS3
AS3 Questions relatives à la programmation ActionScript 3 (Cours AS3)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/03/2011, 11h18   #1
Futur Membre du Club
 
Homme Franck Dupont
Développeur multimédia
Inscription : avril 2008
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Franck Dupont
Âge : 37
Localisation : France

Informations professionnelles :
Activité : Développeur multimédia
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2008
Messages : 33
Points : 19
Points : 19
Envoyer un message via MSN à kyfr59 Envoyer un message via Skype™ à kyfr59
Par défaut Problème de variable fantôme dans une fonction de callback

Bonjour,

J'appelle une connexion remote qui se déroule bien et qui utilise un responder pour gérer les résultats :

Code :
private var retourServeur:Responder = new Responder (succes, echec);
Ma méthode succes() est donc appelée par le responder, et j'y stocke mes résultats :

Code :
1
2
3
4
5
private var chaine:String;
public function succes ( pRetour:* ):void
{
    chaine = "mes_resultats";
}


Mais lorsque j'appelle ma méthode getChaine(), surprise : ma chaine vaut "null" :
Code :
1
2
3
4
public function getChaine():String
{
    return chaine;
}
Les fonctions de callback ont elles des particularités qui font qu'elles ne peuvent pas renseigner des variables de classe ?

Merci d'avance.

Franck.
kyfr59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 12h36   #2
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
salut

tu dois appeler ton getChaine() avant l'execution de succes() !
fait un trace dans ta méthode succes() pour verifier qu'elle est bien executé
__________________
Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
Mon blog : http://web.codeur.free.fr
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 12h51   #3
Futur Membre du Club
 
Homme Franck Dupont
Développeur multimédia
Inscription : avril 2008
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Franck Dupont
Âge : 37
Localisation : France

Informations professionnelles :
Activité : Développeur multimédia
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2008
Messages : 33
Points : 19
Points : 19
Envoyer un message via MSN à kyfr59 Envoyer un message via Skype™ à kyfr59
Elle l'est !

J'ai même essayé d'attendre quelques secondes avant d'appeler getChaine(), mais rien n'y fait...

J'ai aussi essayé d'émettre un évènement depuis succes().
kyfr59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 14h01   #4
Futur Membre du Club
 
Homme Franck Dupont
Développeur multimédia
Inscription : avril 2008
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Franck Dupont
Âge : 37
Localisation : France

Informations professionnelles :
Activité : Développeur multimédia
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2008
Messages : 33
Points : 19
Points : 19
Envoyer un message via MSN à kyfr59 Envoyer un message via Skype™ à kyfr59
Voici le code complet :

Code :
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
package
{
	import flash.net.NetConnection;
	import flash.net.Responder;
	import flash.events.*;	
 
	public class Remoting
	{
		private var connexion:NetConnection;
		public var chaine:String;
		private var retourServeur:Responder = new Responder (succes, echec);
 
		public function Remoting() 
		{
			connexion = new NetConnection();
			connexion.connect("http://www.mondomaine.fr/amf");
			connexion.call("mon_service.ma_methode", retourServeur);
		}
 
		public function succes ( pRetour:* ):void
		{
			trace( pRetour["titre"]); // Fonctionne
			chaine = "texte de ma chaine";
		}
 
		private function echec ( pErreur:* ):void
		{
			trace(pErreur.description);
		}
 
		public function getChaine():String
		{
			return chaine;
		}
	} 
}
Que j'appelle comme ceci :

Code :
1
2
var r:Remoting = new Remoting();
trace(r.getChaine());
kyfr59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 17h20   #5
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
ben c'est bien ce que je disais !!
essaye de relire mon message précédent et fait des trace(), tu verras tout de suite ou est ton probleme !
__________________
Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
Mon blog : http://web.codeur.free.fr
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/03/2011, 09h02   #6
Futur Membre du Club
 
Homme Franck Dupont
Développeur multimédia
Inscription : avril 2008
Messages : 33
Détails du profil
Informations personnelles :
Nom : Homme Franck Dupont
Âge : 37
Localisation : France

Informations professionnelles :
Activité : Développeur multimédia
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2008
Messages : 33
Points : 19
Points : 19
Envoyer un message via MSN à kyfr59 Envoyer un message via Skype™ à kyfr59
Salut,

Effectivement le trace() de getChaine() apparaît avant celui de succes()...

Je m'en suis tout de même sorti en déclenchant un évènement personnalisé qui contenait les résultats.

Peut être as tu une solution plus élégante ?

Merci d'avance.

Franck.
kyfr59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 11h35   #7
Membre Expert
 
Avatar de Lorenzo77
 
Inscription : mai 2006
Messages : 1 294
Détails du profil
Informations personnelles :
Âge : 40
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mai 2006
Messages : 1 294
Points : 1 220
Points : 1 220
tu as la bonne solution, il faut utiliser un événement !!
c'est la seule façon de savoir a quel moment les données sont chargées !
__________________
Le plus grand arbre est né d'une graine menue, une tour de neuf étages est partie d'une poignée de terre.
Mon blog : http://web.codeur.free.fr
Lorenzo77 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h23.


 
 
 
 
Partenaires

Hébergement Web