ASIHTTPRequest多个POST参数

时间:2011-03-23 17:04:48

标签: ios iphone asihttprequest

我正在使用ASIFormDataRequest将数据发布到服务器,我需要发布一个值数组(下面示例中的字符串)。我正在使用枚举器循环遍历每个并将它们添加到请求中,但只有最后一个通过 - 您期望setPostValue的行为,而不是addPostValue

知道为什么只有一个价值出现?

NSEnumerator *pupilEnumerator = [pupils objectEnumerator];
id pupil;
while ((pupil = [pupilEnumerator nextObject])) {
  [request addPostValue:pupil forKey:@"pupils"];
}

请注意addFileaddPostData也会出现这种情况。

干杯。

3 个答案:

答案 0 :(得分:4)

你的循环只是不断取代“瞳孔”值。摆脱循环并尝试[request addPostValue:pupils forKey:@"pupils"];

答案 1 :(得分:3)

如果我是你,我会将你的pupils对象捆绑成一个JSON字符串(我使用JSON Framework,但还有其他选项),并把它放在帖子体中。

或者,如果您要发布到PHP脚本,则可以通过在键名后添加“[]”将多个值直接发布到数组中。所以,仍然在你的循环中,你可以说[request addPostValue:pupil forKey:@"pupils[]"];,然后你的发布到脚本将有一个名为$ pupils的数组,它将包含所有这些值。

答案 2 :(得分:1)

我遇到了类似的问题,我有多个参数,其中一个(只有一个参数)应该是一个数组。我找到的更简单的方法是将该数组的值添加到NSMutableArray,然后将这些值传递给参数:

//Don't forget to set this array to retain its values in the property
self.arrSelected = [[NSMutableArray alloc]initWithArray:nil];

if(switch1.selected){
    [self.arrServicesSelected addObject:@"value1"];
}
if(switch2.selected){
    [self.arrServicesSelected addObject:@"value2"];
}
if(switch3.selected){
    [self.arrServicesSelected addObject:@"value3"];
}

然后你只需要遍历数组并将值添加到POST参数。确保将它们添加到不同的索引。我看到有些人在没有索引的情况下添加到[]并且不起作用,因为它只会添加最后一个。如果你不使用[],你只会添加第一个。

for(int i=0; i< [self.arrSelected count];i++){
    [requestPOST setPostValue:[self.arrSelected objectAtIndex:i]  forKey:[NSString stringWithFormat:@"chk_parameter_serv[%i]", i]];
}

您还可以使用 forin 语法:

int i=0;
for(NSString *strValue in self.arrSelected)
    [requestPOST setPostValue:strValue  forKey:[NSString stringWithFormat:@"chk_parameter_serv[%i]", i++]];