2008-11-13 6 views
0

Ruby sur les contrôleurs Rails permet de convertir automatiquement les paramètres d'un tableau si elles ont un format spécifique, comme ceci:Spécifier plusieurs paramètres du même nom en utilisant HTTPService

http://foo.com?x[]=1&x[]=5&x[]=bar 

Ce obtiendriez converti dans le tableau suivant:

['1','5','bar'] 

Est-il possible de faire cela avec un objet HTTPService ActionScript 3, en utilisant le paramètre request? Par exemple, il serait bien de faire quelque chose comme ce qui suit:

var s:HTTPService = new HTTPService(); 
s.request['x[]'] = 1; 
s.request['x[]'] = 5; 
s.request['x[]'] = 'bar'; 

Cependant, cela va simplement remplacer chaque valeur, ce qui entraîne que dans la dernière valeur transmise. Quelqu'un a une meilleure idée? Je sais que je pourrais juste ajouter des choses à la chaîne de requête, mais je voudrais le faire dans le corps du POST.

Répondre

2

Je travaillais sur ce même problème aussi. Fortunatly, Flex soutient ceci hors de la boîte.

Il suffit d'utiliser un tableau pour la valeur du champ:

var service:HTTPService = new HTTPService(); 
service.useProxy = true; 
service.destination = "myservicet"; 
service.resultFormat = HTTPService.RESULT_FORMAT_XML; 

var fields:Array = ["categories", "organisation"]; 
var params:Object = new Object(); 
params.q = "stackoverflow"; 
params.rows = 0; 
params.facet = "true"; 
params["facet.field"] = fields; 
service.send(params); 

Le HTTPService convertira ce t0 les paramètres url:

facet=true&q=stackoverflow&facet%2Efield=categories&facet%2Efield=organisation&rows=0

Hope this helps!

Ajouté pour plus de clarté. Quand il n'y a qu'un seul argument dans le tableau, ne passez pas les champs en tableau. Pour une raison quelconque, flex n'enverra pas cela au service http

1

je fais quelque chose comme ça ...

 

var s:HTTPService = new HTTPService(); 
s.url = "http://foo.com"; 
s.method = "post"; 
// add listeners... 
s.addEventListenser(ResultEvent.RESULT,function(event:ResultEvent){ 

    mx.controls.Alert.show(event.result.toString()); 
}); 

// send the data... 
s.send({ 
    a: 1, 
    b: 5, 
    c: "bar" 
}); 

 

qui se traduirait par HTTP GET/POST:

http://foo.com?a=1&b=5&c=bar

Vous pouvez aussi simplement créer un tableau associatif et laissez-passer à la méthode d'envoi HTTPService, ce serait quelque chose comme:

 


var postdata:Object = {}; 

postdata["a"] = 1; 
postdata["b"] = 5; 
postdata["c"] = "bar"; 

// s is the HTTPService from above... 
s.send(postdata); 

 
+0

Je dois pouvoir faire en sorte que tous les paramètres de publication aient le même nom. Cette méthode utilise toujours des noms différents pour les paramètres de publication. – Micah

+0

Je suis intéressé, pourquoi avez-vous besoin de tous les paramètres pour utiliser le même nom? – defmeta

+0

Ruby on Rails fait de la magie et convertit tous les paramètres du même nom en tableau. Très utile lorsque vous avez besoin d'afficher un tableau de valeurs. – Micah

0

Vous avez mentionné que tous les paramètres POST doivent avoir le même nom. Les éléments portant le même nom s'écrasent mutuellement dans un tableau associatif. Cependant, j'ai déjà traité des cellules de calendrier, et toutes les 31 cellules appartiennent à la catégorie Date.

Ce que je ne faisais que:

var params:Object = new Object; 
for (var i:uint=0; i<31; i++){ 
    params["Date"+(jj.toString())] = date[i]; 
} 

HTTPService....etc. 
HTTPService.send(params); 

Ainsi, du côté réception POST, il serait interprété comme Date0...Date31.

Je ne sais pas si c'était ce que vous vouliez, et le poste était il y a si longtemps.

0

Pensez-y. Pourquoi ne faites-vous pas une poussée de tableau de tous les éléments sous le même nom d'index? Cependant, cela signifie que vous envoyez un tableau au destinataire.

Si vous postez ceci, comment cela sera-t-il référencé par URL?

Questions connexes