L'envoi de la requête HTTP avec plusieurs paramètres ayant le même nom
J'ai besoin d'envoyer une requête HTTP (et obtenir la réponse XML) à partir de Flash qui ressemble à la suivante:
http://example.com/somepath?data=1&data=2&data=3
I. e. le fait d'avoir plusieurs paramètres qui partagent le même nom, mais ont des valeurs différentes.
Jusqu'à maintenant j'ai utilisé le code suivant pour faire des demandes HTTP:
var resp:XML = new XML();
resp.onLoad = function(success:Boolean) {/*...*/};
resp.ignoreWhite = true;
var req:LoadVars = new LoadVars();
req["someParam1"] = 3;
req["someParam2"] = 12;
req.sendAndLoad("http://example.com/somepath", resp, "GET");
Dans ce cas, ce ne sera pas le faire: il n'y aura qu'un seul paramètre ayant la dernière valeur.
Quelles sont mes options? Je suis à l'aide d'actionscript 2.
Ajouté
Je suppose, je peux faire quelque chose comme ça:
var url:String = myCustomFunctionForBuildingRequestString();
var resp:XML = new XML();
resp.onLoad = function(success:Boolean) {/*...*/};
resp.load(url);
Mais dans ce cas je suis de perdre la capacité de faire des requêtes POST. Des alternatives?
Évolution de la demande n'est pas approprié.
OriginalL'auteur n0rd | 2009-12-02
Vous devez vous connecter pour publier un commentaire.
Bien que POSTE peut avoir plusieurs valeurs pour la même clé, je serais prudent de l'utiliser, car certains serveurs ne peuvent même pas gérer correctement, ce qui est probablement pourquoi ce n'est pas pris en charge ... si vous "convertir" en double" paramètres d'une liste, le tout pourrait commencer à s'étouffer, si un paramètre est livré en une seule fois, et tout à coup vous vous retrouvez à avoir une chaîne ou quelque chose ... mais je suppose que vous savez ce que vous faites ...
Je suis désolé de le dire, mais ce que vous voulez faire, ce n'est pas possible dans le plus pur AS2 ... les 2 seules les classes disponibles pour HTTP sont
LoadVars
etXML
... techniquement il y a aussiloadVariables
, mais il sera tout simplement copier les propriétés de l'objet passé en la demande, ce qui ne change pas votre problème, puisque les propriétés sont uniques ...si vous voulez rester AS2, vous avez besoin d'une couche intermédiaire:
flash.external::ExternalInterface
vous pouvez appeler du code JavaScript. Vous avez besoin de définir un rappel pour quand l'opération est faite, ainsi que d'une fonction JavaScript que vous pouvez appeler (il y a d'autres manières, mais cela devrait suffire). Construire la chaîne de demande à l'intérieur de flash, c'est la pompe à JavaScript et laissez JavaScript de l'envoyer au serveur une requête POST et obtenir la réponse en retour de l'éclair à travers la fonction de rappel.à vous de décider lequel est le plus de travail ...
note de côté: en AS3, vous pouvez utiliser
flash.net::URLLoader
avecdataFormat
ensemble deflash.net::URLLoaderDataFormat.TEXT
, puis de nouveau encoder les paramètres d'une chaîne de caractères, et de les envoyer.OriginalL'auteur back2dos
La http standard de l'envoi de la matrice de données est
Mais ce n'est pas mal non plus (ajouter de commentaire):
L'envoi de plus de paramètres avec le même nom, comme vous le faites, dans la pratique signifie que tous, mais le dernier point doit être ignoré. C'est parce que lors de la lecture de variables, le serveur remplace (dans la mémoire) tout élément qui a le même nom que celui-là, car le changement de nom d'une variable n'est pas une bonne pratique et n'a jamais été.
Je ne sais pas (aucun :p) mais vous auriez du y accéder sous forme de liste ou de tableau ou que ce soit des structures de données dont il dispose.
J'ai corrigé la phrase un peu. Je ne sais pas du tout specs en le disant, j'ai ajouté "dans la pratique".
Et à propos de matrices creuses... ce n'est pas un étant donné que le serveur de soins, [qui] signifie "ajouter au tableau". Et si vous allez envoyer deux mille articles, alors il ya de meilleures façons. 😉
Une fois de plus: le serveur est déjà écrit et de travail et je ne peux pas changer quoi que ce soit. Il comprend de telles demandes d'amende. Il ne remplace pas tout en mémoire lors de la lecture des paramètres.
OriginalL'auteur Tor Valamo
Avertissement; je n'ai jamais utilisé d'Actionscript et n'ont pas les moyens pour les tests de cette.
De mettre le même nom de variable avec plusieurs valeurs sur la chaîne de requête est la norme de l'envoi de la multi-valeur des variables (par exemple la forme des cases à cocher) vers des serveurs web. Si
LoadVars
est capable d'envoyer plusieurs valeurs, il semble plausible que les valeurs doivent être stockées dans un tableau:Il semble aussi y avoir un décoder fonction de LoadVars, ce qui se passe si vous essayez d'importer la chaîne de requête que vous voulez dans l'objet?:
En effet, il n', la représentation interne doit être une cartographie de chaîne de chaîne de caractères. Vous aurez à construire la chaîne de requête à l'aide d'un outil ou décoder les différentes valeurs sur le serveur.
OriginalL'auteur Anders Lindahl
Vous ne pouvez pas utiliser loadvars comme ça - parce que
data
peut être 1 ou 2 ou 3, pas tous en même temps.Vous pouvez passer soit comme une liste séparée par des virgules:
ou comme une chaîne de caractères xml, et de l'analyser au niveau du serveur. Je ne suis pas familier avec la manipulation de xml en AS2, mais c'est comment vous pouvez le faire en AS3:
La chaîne que vous envoyez est:
Encore une fois, mon AS2 est limité - mais quelle que soit la méthode que vous utilisez pour envoyer des données, une variable peut contenir une seule valeur et, par conséquent, vous devez faire un peu de codage comme la concaténation ou xml ou json-tableaux pour accomplir cette tâche.
Je ne demande pas sur les variables, je veux avoir de multiples paramètres de la requête avec le même nom, qui sont tout à fait sans rapport avec les variables, sauf si quelqu'un (ce qui est le cas avec LoadVars) pour des raisons inconnues décider de faire une correspondance entre eux.
Lorsque vous postez un paramètre de la requête au serveur en disant de données=1 et data=2, que pensez-vous que le serveur de déduire de qui?
Le serveur est déjà au travail et gère plusieurs demandes de paramètres avec le même nom qu'une liste de valeurs. Je ne peux pas changer quoi que ce soit à ce sujet: le serveur est en train de travailler avec différents types de clients, rédigés dans d'autres langues et personne ne le patch tout simplement parce que actionscript n'autorise pas de telles demandes par la norme.
OriginalL'auteur Amarghosh