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" :)