as:sendAndLoad
Un article de Polydoc.
AS 1 - Flash Player 6 et ultérieur
Sommaire |
[modifier] Synopsis
void sendAndLoad(url:String, target:Object, [method:String])
[modifier] Description
La méthode sendAndLoad en ActionScript va vous permettre de faire transiter des variables entre un document extérieur à votre animation (page php, asp...) et votre animation en question. En fait, Flash va commencer par envoyer ses variables puis va attendre la réponse de votre script.
La fonction possède seulement trois paramètres qui sont :
- url:String - Il s'agit simplement de l'adresse (url, absolue ou relative) de la page qui devra être appellée par Flash. Si vous voulez tester votre animation en local, il vous faudra mettre une url absolue.
- target:Object - Il s'agit de définir la variable de type LoadVars ou XML (voir explications ci-après) qui permettra de récéptionner la réponse de votre page appellée par la méthode send.
- method:String - Il s'agit de la méthode d'envoi des variables Flash vers php. Les deux choix possibles sont GET ou POST. Ce paramètre est facultatif : en effet la valeur par défaut est POST.
[modifier] Notes
Souvent, beaucoup de "novices" en ActionScript trouve l'utilisation de cette fonction peut être trop compliquée. Mais il n'en est rien. Bien au contraire, l'ulisation de cette fonction est très logique et celle-ci est recommandée par Adobe car étant plus récente, elle est aussi bien plus rapide et efficace que ses aïeulles loadVariablesNum...
[modifier] Explications
La fonction sendAndLoad s'utilise en plusieurs étapes. Les voici donc expliquées au travers d'un exemple didactique :
[modifier] Mise en place de la scène
Sur _root (_level0), placer :
- Un champ de texte (type saisie) intitulé "textInput".
- Un champ de texte (type dynamique cette fois) intitulé "phpAnswer".
- Un bouton intitulé "buttonSendToPhp".
[modifier] But du script
Le but du script de cet exemple va être d'envoyer le texte saisi dans "textInput" à une page de type php (cela fonctionne pour la plupart des langages dynamiques tels que l'asp, jsp, cfm, perl...) et d'afficher la réponse de php dans le champ de texte dynamique "phpAnswer".
[modifier] Partie ActionScript
Sur la première image clée de _root, on place ce code :
// Définition de l'adresse de la page à appeller et de la méthode à utiliser pour l'envoi des données var send_adress:String = new String("http://monsite.com/traitement.php"); var send_method:String = new String("GET"); // Lorsque l'on click sur le bouton "buttonSendToPhp" this.buttonSendToPhp.onRelease = function():void{ // On affiche "Chargement..." pour faire patienter this._parent.phpAnswer.text = "Chargement..."; // On créer les variables de type LoadVars qui vont permettre l'envoi et la récéption des données de Flash -> php -> Flash var send_datas:LoadVars = new LoadVars(); var recept_datas:LoadVars = new LoadVars(); // On attache la valeur du champ de texte "textInput" à la variable send_datas pour son envoi à php send_datas.textInput = escape(_root.textInput.text); // On peut désormais envoyer à php send_datas.sendAndLoad(send_adress, recept_datas, send_method); // On attend de reçevoir les données de php recept_datas.onLoad = function(succes:Boolean){ // Si on a une réponse de php if (succes){ // On l'affiche dans le champ de texte dynamque _root.phpAnswer.text = this['phpAnswer']; // Sinon, il y a eu une erreur lors du transfert }else{ _root.phpAnswer.text = "Erreur de chargement!"; } } }
Sachez que la fonction escape() de Flash permet d'échapper les caractères spéciaux d'une chaîne. Son utilisation est fortement conseiller lors de l'envoi de données de type string. Sa fonction inverse est unescape().
[modifier] Partie PHP
Nommer une page "traitement.php" et l'envoyer sur le Net. Voici le code minimum à insérer dedans pour que le script puisse fonctionner :
// On reçoit la variable nous venant de Flash (souvenez-vous de la méthode choisie : GET if (!empty($_GET['textInput'])){ // Puis on envoi la réponse à Flash echo "&phpAnswer=" . utf8_encode("La variable contenait" . $_GET['textInput']); } // Si la variable de Flash ne contient rien, on envoi un autre message else{ echo "&phpAnswer=" . utf8_encode("La variable était vide."); } // On stop le script exit;
Sachez que la fonction utf8_encode() de php va vous permettre d'echapper tous les caractères spéciaux d'une chaîne (elle est "équivalente" à escape() dans Flash). Elle est capitale lors de l'envoi de données de type string à Flash. Sa fonction inverse est utf8_decode().
Pour vous simplifier la vie et pour éviter de s'embêter avec la concaténation à chaque envoi vers Flash, vous pouvez écrire une fonction php très simple et qui vous aidera grandement. La voici toute prête :
function send_to_flash ($variable, $value){ echo "&" . $variable . "=" . utf8_encode($value); }
Après c'est un jeu d'enfant pour envoyer vos contenus à Flash :
send_to_flash("ma_variable", "contenu de ma variable !");

