J'ai besoin d'envoyer une requête HTTP (et d'obtenir une réponse XML) à partir de Flash qui ressemble à la suivante:
var url:String = myCustomFunctionForBuildingRequestString(); var resp:XML = new XML(); resp.onLoad = function(success:Boolean) {/*...*/}; resp.load(url);
4 Réponses :
Vous ne pouvez pas utiliser loadvars comme celui-ci - car Vous pouvez soit transmettre comme une liste séparée par des virgules : P> ou en tant que chaîne XML, et analysez-le sur le serveur. Je ne connais pas la manipulation de XML en As2, mais c'est ainsi que vous le feriez dans AS3: p> la chaîne que vous envoyez est la suivante: p> data code> peut être 1 ou 2 ou 3, pas tous en même temps.
<root>
<data>1</data>
<data>2</data>
<data>3</data>
</root>
Je sais que je ne peux pas le faire avec Loadvars, c'est pourquoi je pose la question. Je veux dire, Loadvars n'est évidemment pas la seule méthode d'envoi de demandes HTTP. Malheureusement, ni les paramètres de concaténation en une seule, ni de demande d'envoi en tant que XML ne sont pas appropriés.
Encore une fois, mon as2 est limité - mais quelle que soit la méthode que vous utilisez pour envoyer des données, une variable ne peut contenir qu'une seule valeur b> et vous devez donc faire un encodage comme une concaténation ou des tableaux XML ou JSON pour y accomplir.
Je ne demande pas de variables, je veux avoir plusieurs paramètres de demande avec le même nom, qui sont tout à fait sans rapport avec les variables, à moins que quelqu'un (ce qui est le cas avec LoadVars) pour des raisons inconnues décident de faire une correspondance individuelle entre elles .
Lorsque vous postez un paramètre de requête sur le serveur disant DATA = 1 et DATA = 2, que vous attendez-vous au serveur de déduire de cela?
Server fonctionne déjà et gère plusieurs paramètres de requêtes avec le même nom que la liste des valeurs. Je ne peux rien changer à ce sujet: Server travaille déjà avec différents types de clients écrits dans d'autres langues et personne ne corrigera tout cela simplement parce que ActionScript n'autorise pas ces demandes par des moyens standard.
Vous postez plusieurs valeurs pour la même variable via un autre type de client - dites JavaScript?
D'autres clients sont écrits en C ++ et Java.
D'autres clients ont été écrits par d'autres personnes, BTW. Je ne sais pas comment ils travaillent.
Disclaimer; Je n'ai jamais utilisé ActionScript et je n'ai aucun moyen de tester cela.
Mettre le même nom de variable avec plusieurs valeurs de la chaîne de requête est le moyen standard d'envoi de variables multi-valeurs (par exemple, des cases à cocher de formulaire) sur des serveurs Web. Si Il semble également y avoir une Decode fonction à Loadvars , que se passe-t-il si vous essayez d'importer la chaîne de requête que vous souhaitez dans l'objet?: P> loadvars code> est capable d'envoyer plusieurs valeurs, il semble plausible que les valeurs doivent être stockées dans un tableau: p>
req.decode("someParam1=foo&someParam1=bar&someParam1=bas");
Malheureusement, lorsque vous attribuez un tableau pour demander un paramètre de requête, il fait quelque chose comme Array.join (",") (Eh bien, il appelle probablement sa méthode de ToString () et l'attribue à la demande de paramètre (c'est-à-dire qu'il existe un paramètre Onyl un avec des virgules valeurs). Si vous décochez la chaîne, vous obtenez une valeur de type chaîne égale à la valeur de la dernière des paramètres (pour vous, ce serait «BAS»). Semble que LoadVars est incapable d'envoyer de telles demandes par conception.
En effet, la représentation interne doit être une mappage de la chaîne à la chaîne. Vous devrez construire la chaîne de requête en utilisant un autre outil ou décoder les différentes valeurs du serveur.
Bien que la poste puisse avoir plusieurs valeurs pour la même clé, je l'utiliserais, car certains serveurs ne peuvent même pas gérer correctement cela, ce qui est probablement pourquoi cela n'est pas pris en charge ... si vous convertissez " Dupliquer "Paramètres à une liste, tout ce qui pourrait commencer à s'étouffer, si un paramètre n'entre qu'une seule fois, et que SUDDDENDLY VOUS aime avoir une chaîne ou quelque chose ... mais je suppose que vous savez ce que vous faites ... < / p>
Je suis désolé de le dire, mais ce que vous voulez faire, n'est pas possible dans pure AS2 ... Les seules 2 classes disponibles pour HTTP sont Si vous voulez coller à AS2, vous avez besoin d'un niveau intermédiaire: p>
Jusqu'à vous de décider lequel est plus de travail ... p>
côté Note: em> in AS3, vous utiliseriez loadvars code> et
xml code > ... Techniquement, il y a aussi
loadvariables code>, mais il copiera simplement copier des propriétés de l'objet transgé dans la demande, ce qui ne change pas votre problème, car les propriétés sont uniques ... P>
flash.external :: externalinterface code> Vous pouvez appeler le code JavaScript. Vous devez définir un rappel lorsque l'opération est effectuée, ainsi qu'une fonction JavaScript que vous pouvez appeler (il existe d'autres moyens, mais cela devrait suffire). Construisez la chaîne de demande à l'intérieur Flash, pompe-la sur JavaScript et laissez-la envoyer à JavaScript sur le serveur dans une requête de poste et récupérez la réponse au clignotant dans le rappel. Li>
ol>
flash.net:oRLLoader code> avec
dataformat code> défini sur
flash.net :: urlloaderdataformat.text code>, puis à nouveau coder les paramètres à une chaîne et envoyez-leur. P>
Le mode HTTP standard d'envoi de données de tableau est mais ce n'est pas faux non plus (ajouté de commentaires): P> http://example.com/?data[]=1&data[]=2
+1, bien que réellement je pensais que ce serait exemple.com/?data [] = 1 & Data [] = 2 , alors que ce que vous avez écrit est pour les tableaux rares ou associatifs ... Avez-vous une source, qui stipule que tous les articles, mais le dernier devraient être ignorés? De nombreux serveurs agissent de cette façon, mais je ne pouvais trouver aucune spécification le demandant ...
J'ai édité un peu la phrase. Je ne connais aucune spécification le disant, j'ai ajouté "en pratique".
Et sur des tableaux rares ... ce n'est pas une donnée que le serveur devrait s'occuper de ce que [] signifie «ajouter au tableau». Et si vous allez envoyer deux mille articles, il y a de meilleurs moyens. ;)
Encore une fois: le serveur est déjà écrit et travaille et je ne peux rien changer. Il comprend de telles demandes bien. Il ne écrase rien en mémoire lors de la lecture de paramètres.