Forum de discussion
Forum « Flash et Shockwave » (archives)
Re: XMLConnector.direction = 'send' ... serait-ce un leure? précision
Envoyé: 11 décembre 2004, 11h57 par Oznog
VOILÀ UN AUTRE EXEMPLE DE LA PLUS MAUVAISE DOCUMENTATION JAMAIS FAIT PAR UNE ENTREPRISE EN INFORMATIQUE. Macromedia démontre encore une fois sa total incapacité à bien documenter sa propre technologie. Bravo!
Tu as fait deux erreurs. Et c'est normale que l'on retrouve autant de messages sur les forums car c'est deux points sont toujours dificile à saisir. Sasn parler les erreur de Macromedia, ses exemple online très limité (pour vendre ses cours). Puisque je travail en dur avec AS2 sasn composante je ne suis pas famillier. D'.auitre part cet composante n'est pas fait vraiment pour ça bien que se soit possible. Tu peux ien ne rien trouvé sur le sujet. voilà je tester ça moi même un fois pour toute!
1. Première erreur, as-tu vu une méthode ou une class "save" ? Send envoie des données mais ne sauve absolument rien. C'est effectivement comme ta conclusion le suggère utilisé pour envoyer des données à un script serveur, SEUL a avoir les autorisation nécessaire pour sauver quoi que se soit sur le disque dûr d'un serveur.
D'ailleurs pense s'y quelques secondes. Imagine que je cré un produit aussi puissant que Flash et que j'ajoute une fonctionnalité pour sauver des valeurs sur un serveur Web. Pense tu que les serveur Web ET TOUS LES SERVEURS WEB du monde me laisseront sauver sur leur disque dûr?
Bisn sûr que non. Si le ASP ou le PHP permet de sauver c'est que ces langages sont exécuté directement sur le serveur. Il faudrait la même chose avec Flash. C'est ce que faisait "Generator" à l'époque, on devait l'installer sur le serveur.
En résumé, cette fonctionnalité ne permet pas de sauver quoi que se soit sur le serveur et pas plus que localement.
2. Erreur fréquente, on pense devoir ouvrir un popUp pour soumettre une requète à un script serveur. Ce qui est tout à fait faux. Parcequ'on pense devoir utiliser un getUrl!
Bien sûr le getUrl fait le travail mais ce n'est pas son rôle. Le vieux loadVariables ou loadVariablesNum et le nouveau sendAndLoad permettent d'envoyer des données à un script serveur et de récupérer l'état d'une transaction sans l'ouverture d'une fenêtre.
MAIS, ton connecteur aussi. C'est le "send" qui envoie mais ça ne se fait pas tout seul, tu dois avoir un script serveur au bout pour sauver. SANS OUVRIR UNE FENÊTRE. Le problème c'est que c'est une composante, fait pour simplifier (enfin!) le processus. Tu peux aussi le faire manuellement en AS2 carrément avec l'objet XML :
monXML = new XML()
3. Maintenant reste un petit détail. Le Flash se contente d'envoyer des données dasn les deux cas. C'est donc le script serveur qui fait la création du XML et là c'est une autre histoire. Je me contente d'un exemple simple.
http://www.trucsweb.com/Flash/twSauveXml.asp?var1=allo&var2=toto&var3=coco
Ce script ASP ne fait que récupérer les paramètres (un nombre illimité) et créer un fichier XML à la vollé QUI N'EST PAS SAUVÉ SUR LE DISQUE et qui n'utilise même pas l'objet XML. C'est seulement pour démontrer qu,il reçoi des valeurs du Flash et qu'il retourne un XML que Flash pourra exploité.
4. Côté Flash maintenant. C'est ici le vide. Absolument rien sur le Web anglophone (je n'ai même pas pas cherché en français) que des bride de code. Tout semble très facile, envoyer avec le "param" et "send/recive", récupérer et afficher. Le problème est comment récupérer les paramètre avec le script serveur. Je travail le dessus...
Bon quelques heures plus tard ;-)
Rien à faire, l'envoie de données externe se fait en ajoutant un "param" qui doit être un XML valide (enfin selon Macromedia), de cette façon selon Macromedia :
var sendXML = new XML("<login username='Mort'><password mot='Guacamole'>");
J'ai beau chercher c'est ici que la bas blesse. Et d'aileurs on voit tout de suite le niveau de compréhension du XML de Macromedia!
L'envoie n'est pas "propre". En fait ce que ce XML envoie c'est :
Paramètre 1 : <loginusername
Valeur 1 : "Mort">
Paramètre 2 : <passwordmot
Valeur 2 : "Guacamole">
1. L'espace entre login et username se perd. Et l'ajout d'un espace encodé chr(33) n'y change rien! Le problème c'est qu'il n'y a pas 36 solutions côté serveur avec une requête HTTP, un item et une valeur...
J'ai passé un bon 2 heures à tenter toutes sortes de possibilités. Logiquement on devrait avoir :
var sendXML = new XML("<PARAM>valeur</PARAM>");
Mais non! Je donne quand même un exemple complet pour ceux qui veulent perdre leur temps mais je conseil à ceux qui veulent créer un fichier dynamique en Flash d'utiliser sendAndLoad pour pour passer les valeurs au script serveur et créer le document XML. ET si vous voulez utiliser le "Connector" pour lire, aucun problème bien que je conseil encore une fois le bon monXML = new XML()...
1. Glisser la composante "XMLConnector" sur la scène, elle s'ajoutera automatiquement dans la libtrairie. Vous pouvez ensuite la détruire de la scène. (Je n'arrive pas à la glisser directement dasn la librairie malgré les dirent de Macromedia).
2. Puis copier sur la première image-clé.
import mx.data.components.XMLConnector;
// Création d'un écouteur pour afficher le résultat
// Avec la fonction result
var xmlListener:Object = new Object();
xmlListener.result = function(evt:Object) {
trace("results:");
trace(evt.target.results);
trace("");
};
// Création du connecteur et ajout de l'écouteur
var myXMLConnector:XMLConnector = new XMLConnector();
myXMLConnector.addEventListener("result", xmlListener);
// Créaton du XML pour passer les paramètres
// c'Est ici qu'il faut trouver la bonne syntaxe.
var sendXML = new XML("<login username='oznog'><password mot='allo'>");
// Forcer l'encodage sinon ça ne fonctionne absolument pas
// Encore une fois on voit l'amateurisme, pourquoi ce n'est pas par défaut!!
sendXML.addRequestHeader("Content-Type", "application/x-www-form-urlencoded")
// Enfin, passer le XML paramètre dasn l'objet connetor
myXMLConnector.params = sendXML
// La direction envoie et retrouve
myXMLConnector.direction = "send/receive";
// Le url du traitement serveur
myXMLConnector.URL = "http://www.trucsweb.com/Flash/twSauveXml2.asp";
// initialise la fonctions de l'écouteur et du connecteur
myXMLConnector.trigger();
myXMLConnector.trigger();
Ciao
Oznog
Réponses
|