使用HTTPService指定同名的多个参数

时间:2008-11-13 19:38:44

标签: flex actionscript-3

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主体中执行此操作。

4 个答案:

答案 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:

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

您也可以创建一个关联数组并将其传递给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)

来考虑一下。 为什么不对同一索引名下的所有元素进行数组推送? 但是,这意味着您要将数组发送到接收方。

如果你正在发布这个帖子,它将如何被网址引用?