Ruby on Rails控制器会自动将参数转换为数组(如果它们具有特定格式),如下所示:
http://foo.com?x[]=1&x[]=5&x[]=bar
这将转换为以下数组:
['1','5','bar']
使用请求参数,我是否可以使用ActionScript 3 HTTPService对象执行此操作?例如,做以下事情会很好:
var s:HTTPService = new HTTPService();
s.request['x[]'] = 1;
s.request['x[]'] = 5;
s.request['x[]'] = 'bar';
但是,这只会覆盖每个值,导致只发送最后一个值。谁有更好的主意?我知道我可以将内容添加到查询字符串中,但我想在POST主体中执行此操作。
答案 0 :(得分:2)
我也在研究同样的问题。幸运的是,Flex支持开箱即用。
只需使用数组作为字段值:
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);
HTTPService会将此t0转换为url参数:
facet=true&q=stackoverflow&facet%2Efield=categories&facet%2Efield=organisation&rows=0
希望这有帮助!
添加更清晰。当数组中只有一个参数时,不要将字段作为数组传递。出于某种原因,flex不会将其发送到http服务
答案 1 :(得分:1)
我经常这样做......
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"
});
将导致HTTP Get / POST:
您也可以创建一个关联数组并将其传递给HTTPService发送方法,如下所示:
var postdata:Object = {};
postdata["a"] = 1;
postdata["b"] = 5;
postdata["c"] = "bar";
// s is the HTTPService from above...
s.send(postdata);
答案 2 :(得分:0)
您提到所有POST参数必须具有相同的名称。 具有相同名称的元素将在关联数组中相互覆盖。 但是,之前我处理过日历单元格,并且所有31个单元格都属于日期类别。
我做的是:
var params:Object = new Object;
for (var i:uint=0; i<31; i++){
params["Date"+(jj.toString())] = date[i];
}
HTTPService....etc.
HTTPService.send(params);
因此,在POST接收方,它将被解释为Date0...Date31
。
不知道这是不是你想要的,这篇文章就是很久以前的事了。
答案 3 :(得分:0)
来考虑一下。 为什么不对同一索引名下的所有元素进行数组推送? 但是,这意味着您要将数组发送到接收方。
如果你正在发布这个帖子,它将如何被网址引用?