Aide - Recherche - Membres - Calendrier
Version complète : transfert de données
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
deuns
Bonjour !
J'abandonne l'autre post pour pouvoir faire du contenu propre par sujet... Voici mon problème:
J'ai une variable que je veux transmettre depuis mon fichier PHP vers mon fichier mxml. Je le fais tout bètement ainsi :
CODE
<embed ... bandeau_archives.swf?position=truc" ...></embed>


Alors déjà je n'arrive pas à récupérer cette variable dans mxml, je me dit que je vais continuer et peut-être trouver la solution en faisant le transfert suivant vers le fichier PHP qui génére le XML, mais je suis confronté au même problème.

Mon but est d'indiquer au fichier qui génère le XML, quelles données il doit renvoyer ?!

Pour l'instant j'ai ça dans mon mxml, ce qui me permet de récupérer de manière statique (dans le sens ou je ne peux pas changer ma requete) les données:

CODE
<mx:HTTPService id="ListeXML" url="../flex/bandeau_archives2.php" result="Main(event)"/>

Je voudrais lui envoyer une variable pour pouvoir ensuite changer ma requète dans ce fichier...

J'ai cherché sur tout le forum (me suis tapé les 10 pages de messages), et pas une réponse à ça (même si je passe encore une fois pour un débile profond, je me dis que ça en aidera sûrement d'autres !!!).

Merci à vous wink.gif
deuns
Bon je ne trouve vraiment rien et tout mes tests tombent à l'eau :/
Il semble que je ne puisse pas récupérer la valeur de ma variable comme on pourrait le faire en flash soit avec : _root.position
Je me retrouve avec une erreur : accés à la propriété non définie _root.

Ca c'était pour le premier passage de la variable...
Pour ensuite faire passer cette variable au php qui génère l'XML, je me retrouve bloqué aussi même si j'ai quand même ma petite idée (mais bon c'est pas encore gagné):

CODE
<mx:HTTPService id="ListeXML" url="../flex/bandeau_archives2.php?position=varPosition" method="GET" result="Main(event)"/>


Un petit coup de pouce serait vraiment le bienvenu, je m'arrache les cheveux depuis hier matin, si ça continu je suis bon pour m'acheter une perruque ! icon_lol.gif
Fusion
C'est bizarre il me semblait qu'on pouvait passer des variables ... Je crois que c'était avec URLVariables, cherche de ce côté.

http://livedocs.adobe.com/flex/2/langref/f...ExamplesSummary
Tonic
Salut,

pour récupérer des variables de ton url, regarde du côté de la propriété "application.parameters".
deuns
Merci les gars smile.gif
je vais regarder tout ça wink.gif
deuns
Je vais vraiment devenir fou avec cette histoire :'(

Voilà ce que j'ai:
Dans mon code qui appelle le swf (j'ai modifié le template html de flex):
CODE
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
            id="bandeau_archives" width="670" height="228"
            codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
            <param name="flashVars" value="maVar=truc">
            <param name="movie" value="bandeau_archives-debug.swf" />
            <param name="quality" value="high" />
            <param name="bgcolor" value="#869ca7" />
            <param name="allowScriptAccess" value="sameDomain" />
            <embed src="bandeau_archives-debug.swf" quality="high" bgcolor="#869ca7"
                width="670" height="228" name="bandeau_archives" align="middle"
                play="true"
                loop="false"
                quality="high"
                allowScriptAccess="sameDomain"
                type="application/x-shockwave-flash"
                flashVars="maVar=Nick"
                pluginspage="http://www.adobe.com/go/getflashplayer">
            </embed>
    </object>

Je transmet donc bien les valeurs avec flashVars (j'ai aussi essayé dans l'url, mais c'est la même chose, ca ne marche pas non plus!)

Voilà comment j'essaye de récupérer de l'autre côté (mxml) :
CODE
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="670"
    height="228" initialize="ListeXML.send();" backgroundGradientColors="[#ffffff, #ffffff]" creationComplete="initVars()">
<mx:Script>
<![CDATA[
    [Bindable]
    public var maVar:String;
        
    // Assigne les valeurs des variables passées lors de l'appel
    private function initVars():void {
            maVar = Application.application.parameters.maVar;
            trace(maVar); //Renvoi NULL
    }
]]>
</mx:Script>
</mx:Application>


Et comme je l'ai précisé en commentaire, le trace() de ma variable renvoit NULL, je n'arrive pas à récupérer la valeur que je transmet... :/ (y'a un pc qui va passer par la fenêtre !!!)
Moustik78
Pour envoyer une variable avec ton HTTPService, tu dois effectivement utiliser URLVariables

CODE
var variables:URLVariables = new URLVariables();
variables.maVar= "test";


et ensuite :
CODE
var httpService : HTTPService = new HTTPService ();
httpService.request = variables




Pour ton deuxième problème, je crois que la syntaxe exacte est :

CODE
Application.application.parameters[maVar]
deuns
Ha ben non.... pourtant j'ai espéré, là d'un coup la console couine !!

icon_neutral.gif Je comprend vraiment pas pourquoi je la recupère pas !! Je me tape la doc depuis un moment maintenant et j'ai bien la même chose : Application.application.paramaters et aussi : fashvars

Bon je viens quand même de trouver une erreur (aprés avoir effectué plusieurs tests, je rajoute des erreurs X( )
L'instanciantion des variables dans flashVars était pas la même dans les balises param et embed...
Mais le fait de corriger ne change rien !
Fusion
CITATION(deuns @ Jun 28 2007, 02:58 PM) *


Tu veux sûrement dire Application.application.parameters et flashvars icon_wink.gif

Bon, tu peux montrer où tu en es dans ton code? Tu ne m'en voudras pas si je te dis que je ne sais pas trop où tu en es icon_cool.gif
Tonic
Pour récupérer un paramètre, il te faut le passer comme ceci en javascript :
CODE
so.addVariable("test",getQueryParamValue("test"));

Ensuite, côté Flex :

so étant un SWFObject.

CODE
Alert.show(this.parameters.test);
deuns
Bon là c'est vraiment la loose :/
J'ai peur d'avoir fait des conneries, je vous dis exactement ou j'en suis, j'ai regardé comment se servir de SWFObject (sur le wiki), j'ai donc dans mon fichier html ça :
CODE
<html lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
    </head>
    <body scroll="no">
        &lt;script type="text/javascript" src="swfobject.js"></script>

        <div id="flashcontent">
            Vous avez besoin du flashplayer pour voir cette animation !
        </div>
        &lt;script type="text/javascript">
            var so = new SWFObject("bandeau_archives.swf", "bandeau_archives", "670", "262", "6.0.65", "#ffffff");
            so.addVariable("test",getQueryParamValue("test"));
            so.write("flashcontent");
        </script>
    </body>
</html>

C'est aussi ce que constitue le fichier de référence de flex dans le dossier: projetFlex/html-template/index.template.html du coup je sais pas trop comment il gère le fichier débug maintenant (j'ai supprimé tout le javascript qu'il y avait pour utiliser cette méthode). Bref jusque là à priori ça fonctionne, pas d'erreur javascript, je lance mon fichier (pas depuis flex) le fichier flash est bien là et non pas "Vous avez besoin du flashpl...".

Ensuite je change mon mxml (je vous fait grâce du style CSS, des imports de classes et de tout ce qui marche...):

CODE
<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="670"
    height="228" initialize="ListeXML.send();" creationComplete="initVars()">

<mx:Script>
<![CDATA[
private function initVars():void {
            Alert.show(this.parameters.test);
            trace(this.parameters.test);
}
]]>
</mx:Script>

<mx:HTTPService id="ListeXML" url="../flex/bandeau_archives2.php" result="Main(event)"/>
</mx:Application>


Donc là je compile le tout dans flex (je lance en debug), il m'ouvre une page dans mozilla, avec l'animation, le alert() vide, dans la console le trace est vide aussi (mais pas de undefined ou NULL, il semble que ce soit un espace), et en même temps flex continue de "launcher" et une fois arrivé à 100% il me fait :
CITATION
Failed to connect; session timed out.
Ensure that:
1. You compiled your Flash application with debugging on.
2. You are running the debug version of the Flash Player.


Bref la joie icon_confused.gif
La loose, la loose, la loose... :/

PS: Fusion=> oui excuse pour les deux fautes, ce n'était pas un copier collé de mon code, mais bel et bien des fautes de frappe, mais tu m'avais compris wink.gif
Fusion
Au cas où tu es encore bloqué ce soir, je testerai chez moi.
deuns
T'embète pas c'est la fin de ma journée de stage, je vais refaire le projet et réessayer tout à l'heure chez moi...
Vous m'avez suffisament aidé, je voudrais pas abuser (surtout que c'est évident que c'est un truc de rien du tout :/ a force je vais bien trouver ou passer mon pc par la fenêtre ^^)

Merci en tout cas Fusion pour ta proposition wink.gif
Fusion
Remplace ta fonction initVars par :

CODE
private function initVars():void {
            Alert.show("objet : "+this.parameters["test"]);


Puis tape dans ton browser :
CODE
mapage.html?test=dudewheresmycar


Et tu verras apparaître le contenu de ta variable dans ton Alert, c'est déjà une bonne chose. Je ne suis pas encore arrivé à le faire avec le so.addVariable machin... Si c'est ce que tu voulais, pardon icon_redface.gif
deuns
Salut et merci pour ta solution !
Pour l'histoire hier impossible d'installer flex chez moi, du coup j'ai dormi et ce matin révélation ^^
Bref ta solution ne peux pas me convenir, je dois vraiment le passer avec le fichier et pas seulement par l'URL, par contre je ne connaissais pas ce tip, et c'est bon à savoir !

Alors si ça peux aider les gens (et sans trop modifier le template de flex, ce qui je pense était ça au final qui me faisait bugger):
Dans le template, à la ligne (dans le javascript) :
CODE
else if (hasRequestedVersion) {

rajouter cette ligne :
CODE
"flashvars",'test=truc'

Rajouter les flashvars dans embed et param (dans la partie html), et y'a plus qu'a le récupérer dans le mxml avec l'une des trois méthodes que vous avez proposées (elles fonctionnent toutes au final).
Voilà j'arrive bien à récupérer ma variable, ce qui m'embète c'est l'obligation de rajouter tout ce javascript dans mon projet (au début je voulais une solution simple et je me retrouve avec un truc encore plus compliqué que de stocker dans un fichier texte ma variable :/ Mais bon au moins j'apprend des nouveaux trucs !)

Il me reste plus qu'à le transmettre au fichier qui génère l'XML et ce sera bon *_*
Merci encore pour votre aide les gens smile.gif (ils sont pas si méchant que ça les rouges héhéhé)
deuns
Re-bonjour,
je viens compléter ce post, car je viens de réussir ce que je voulais faire, et vu que j'ai plus un poil sur le caillou a force de mes les arracher... je partage ma joie !!

Bref voici la solution finale (début de l'explication, transfert php->MXML) :
CITATION
Alors si ça peux aider les gens (et sans trop modifier le template de flex, ce qui je pense était ça au final qui me faisait bugger):
Dans le template, à la ligne (dans le javascript) :
CODE
else if (hasRequestedVersion) {

rajouter cette ligne :
CODE
"flashvars",'test=truc'

Rajouter les flashvars dans embed et param (dans la partie html), et y'a plus qu'a le récupérer dans le mxml avec l'une des trois méthodes que vous avez proposées (elles fonctionnent toutes au final).


Du côté du mxml maintenant, on récupère la valeur :

CODE
<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="670"
    height="228" initialize="initVars()" creationComplete="trace(position); ListeXML.send()">
<mx:Script>
<![CDATA[
// je ne met pas ici les imports des classes pour ne pas alourdir le code (mais ils sont nécessaires)
[Bindable]
    //variable récupérée lors de l'appel du swf puis transmise au fichier qui génère le XML
    private var position:String;

    // assigne les valeurs aux variables
    private function initVars():void {
            position = this.parameters["test"];
    }
]]>
</mx:Script>

<mx:HTTPService id="ListeXML" method="GET" url="../flex/getXML.php" result="Main(event)" useProxy="false">
    <mx:request>
         <pos>{position}</pos>
    </mx:request>
</mx:HTTPService>

</mx:Application>


enfin le php reçoit la variable comme ceci (ici je le fais passer en GET):

CODE
<?php
switch ($_GET['pos']){
    case 'truc':
       $query="blablabla";
    break;
    case ...
    ...
    default:
       $query="blebleble";
    break;
}
...
echo($XML);

?>


Et voilà j'espère que ça aidera certaines personnes, comme moi ça aurait pu m'aider si j'avais trouvé un code comme celui là!
Merci les gens pour m'avoir aidé smile.gif
++
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.