Envoyer des variables à un script PHP
Par Cédric Tabin le jeudi 03.04.2008, 22:20 - ActionScript - Lien permanent
En ActionScript 2, la classe LoadVars permet d'envoyer et reçevoir des données d'un script server-side (PHP le plus souvent) de manière aisée, mais un peu brouillonne. La bonne nouvelle, c'est qu'en ActionScript 3 la méthode est beaucoup plus propre, mais également un (tout petit) peu plus compliquée.
Avant tout, voici un petit script PHP qui permettra de tester les codes ActionScript :
<? $title = $_POST["title"]; $text = $_POST["text"]; //actions diverses... //renvoi sous forme XML header ("Content-Type: text/xml"); echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>"; echo "<root>"; echo "<title>$title</title>"; echo "<text>$text</text>"; echo "</root>"; ?>
Bien évidemment, ce bout de code est juste pour l'exemple En ActionScript 2, une "simple" combinaison des classes LoadVars et XML fait l'affaire :
var sender:LoadVars = new LoadVars(); sender.title = "AStorm for ever"; sender.text = "I love to write some basic tickets on my blog :)"; var receiver:XML = new XML(); receiver.ignoreWhite = true; receiver.onLoad = function(success:Boolean):Void { if (success) { var title:String = this.firstChild.childNodes[0].firstChild.nodeValue; var text:String = this.firstChild.childNodes[1].firstChild.nodeValue; trace("title : "+title); trace("text : "+text); } else { trace("loading error"); } } sender.sendAndLoad("sample.php", receiver, "POST");
Comme dit, en ActionScript 3, il faut passer par quelques classes supplémentaires afin d'obtenir (presque) le même résultat :
var variables:URLVariables = new URLVariables(); variables.title = "AStorm for ever"; variables.text = "I love to write some basic tickets on my blog :)"; var request:URLRequest = new URLRequest("sample.php"); request.data = variables; request.method = URLRequestMethod.POST; var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.TEXT; loader.addEventListener(Event.COMPLETE, onXmlLoaded); loader.load(request); function onXmlLoaded(evt:Event):void { var doc:XMLDocument = new XMLDocument(); doc.ignoreWhite = true; doc.parseXML(loader.data as String); var title:String = doc.firstChild.childNodes[0].firstChild.nodeValue; var text:String = doc.firstChild.childNodes[1].firstChild.nodeValue; trace("title : "+title); trace("text : "+text); }
Bien qu'il y ait légèrement plus de code, celui-ci est beaucoup plus propre ! Seule la classe URLVariables étant dynamic, cela évite de définir les variables à transmettre au sein même de l'instance qui va gérer le chargement. Cela permet également de bien séparer les différents concepts : les données à envoyer, la requête et le gestionnaire de chargement.
Par ailleurs, il est possible de gérer beaucoup plus finement les erreurs de chargement grâce aux événements suivants (gérés par URLLoader) :
- IOErrorEvent.IO_ERROR (fichier non trouvé, connexion perdue).
- SecurityErrorEvent.SECURITY_ERROR (pas d'accès possible au fichier).
Voila pour ce petit billet "rappel"
Commentaires
Merci pour cet exemple qui va grandement me servir !
Bonjour, Merci pour ton tuto. J'ai un petit souci en AS3 et je ne trouve pas la solution :/
J'arrive à retourner une variable php en passant par flash que si la variable php contient une valeur fixe.
Mais dés lors que la valeur de la variable php provient d'une base de donnée, il ne veut pas me l'afficher.
S'aurais tu me dire pourquoi et si ça te fait également ce problème (ça se trouve, ça vient de mon code :/)
Un grand merci d'avance