【问题标题】:ASIHTTPRequest Multiple POST parametersASIHTTPRequest 多个 POST 参数
【发布时间】:2011-07-21 12:08:09
【问题描述】:

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

知道为什么只有一个值通过吗?

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

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

干杯。

【问题讨论】:

    标签: ios iphone asihttprequest


    【解决方案1】:

    您的循环只是不断替换“学生”值。摆脱循环并尝试[request addPostValue:pupils forKey:@"pupils"];

    【讨论】:

    • 我会试一试,但他们的文档说它应该是这样工作的:[request addPostValue:@"Ben" forKey:@"names"]; [request addPostValue:@"George" forKey:@"names"];
    • 好的,谢谢。但是我不能将数组传递给addFile。这是我的代码:NSEnumerator *assetEnumerator = [self.assets objectEnumerator]; id assetUrl; while ((assetUrl = [assetEnumerator nextObject])) { // pass the profile point [request addFile:[(NSURL *)assetUrl path] forKey:@"files"]; } 有什么想法吗?
    • addPostValue:forKey: 不会替换现有值,并且是执行此操作的正确方法。问题可能是某些服务器要求您以某种方式命名具有多个值的参数 - 例如,在 PHP 中,您必须使用 'pupils[]',而不是 'pupils'。
    • 感谢@pokeb 和@picciano,我的应用程序现在运行良好。我希望 StackOverflow 能让我将两个答案标记为已接受,但 Dan Ray 的解决方案(如 @pokeb 的解决方案)从长远来看可能会帮助更多的人。感谢您的帮助!
    【解决方案2】:

    如果我是你,我会将你的 pupils 对象捆绑到 JSON 字符串中(我会使用 JSON 框架,但还有其他选项),然后将其放入帖子正文中。

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

    【讨论】:

    • 感谢 Dan,我发誓我之前尝试过,但没有成功,但现在可以正常工作了 - 我的应用程序现已完成!谢谢。
    【解决方案3】:

    我遇到了一个类似的问题,我有多个参数,其中一个(只有一个参数)应该是一个数组。我发现的更简单的方法是将该数组的值添加到 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++]];
    

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 2011-09-08
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 2011-12-03
      • 2013-01-02
      • 2010-09-15
      相关资源
      最近更新 更多