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 :

  1. 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.
  2. 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.
  3. 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 :

  1. Un champ de texte (type saisie) intitulé "textInput".
  2. Un champ de texte (type dynamique cette fois) intitulé "phpAnswer".
  3. 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 !");

[modifier] Voir aussi

[modifier] Liens internes

  1. as:loadVariablesNum
  2. as:loadVariables
  3. as:load
  4. as:send

[modifier] Liens externes