如何使用 AFNetworking 在 Objective C 中使用操作键进行 POST

Posted

技术标签:

【中文标题】如何使用 AFNetworking 在 Objective C 中使用操作键进行 POST【英文标题】:How to do POST with action key in Objective C using AFNnetworking 【发布时间】:2014-10-25 22:25:51 【问题描述】:

我正在尝试使用名为“#load”的操作参数进行 POST。

对我的网络服务来说,关键是需要显示结果:action:#load

如何使用 AFNetworking 框架做到这一点?这是我的错误代码示例:

首先是常量声明:

const NSString *BASE_URL = @"http://www.mywebservice.com/request.php";

现在是代码:

-(void)requisitarEventos
  [smartEventos removeAllObjects];

  NSString* url = [BASE_URL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

  AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
  [SVProgressHUD showWithStatus:@"Loading..." maskType:SVProgressHUDMaskTypeGradient];

  NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:@"#load",@"action", nil];

  [manager POST:url parameters:parameters
     success:^(AFHTTPRequestOperation *operation, id responseObject) 

         [self carregarEventos:responseObject];
         [SVProgressHUD dismiss];
     
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
         NSLog(@"Error: %@", error);
         [SVProgressHUD dismiss];
     ];
 

【问题讨论】:

【参考方案1】:

我找到了答案。我的 Web 服务代码的真正问题不是在“application/json”中给出 Content-Type 的结果,而是在“text/html”中给出。

我使用下面的代码解决了这个问题:

NSMutableSet *contentTypes = [[NSMutableSet alloc] initWithSet:manager.responseSerializer.acceptableContentTypes];
[contentTypes addObject:@"text/html"];
manager.responseSerializer.acceptableContentTypes = contentTypes;

还有我班级的完整代码:

-(void)callEvents
[smartEvents removeAllObjects];

NSString* url = [NSString stringWithFormat:@"%@myService.php?action=load", BASE_URL];
url = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

[SVProgressHUD showWithStatus:@"Loading..." maskType:SVProgressHUDMaskTypeGradient];

manager.responseSerializer = [AFJSONResponseSerializer serializer];

NSMutableSet *contentTypes = [[NSMutableSet alloc] initWithSet:manager.responseSerializer.acceptableContentTypes];
[contentTypes addObject:@"text/html"];
manager.responseSerializer.acceptableContentTypes = contentTypes;

[manager GET:url parameters:nil
     success:^(AFHTTPRequestOperation *operation, id responseObject) 

         [self carregarEventos:responseObject];
         [SVProgressHUD dismiss];
     
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
         NSLog(@"Error: %@", error);
         [SVProgressHUD dismiss];
     ];

【讨论】:

【参考方案2】:

请看这个,我用回调做了一个简单的post方法,

POST with URL parameters and JSON body in AFNetworking

【讨论】:

以上是关于如何使用 AFNetworking 在 Objective C 中使用操作键进行 POST的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 AFNetworking 通过 Post 请求在服务器上发送 NSData?

如何使用 AFNetworking 为请求设置 HTTP 正文?

如何使用 AFNetworking 在 UILabel 中设置 UIProgressView 的下载状态?

如何在Swift 中使用AFNetworking

如何在 swift 中避免由于 AFNetworking 导致的内存泄漏

如何在同一个项目中使用两个版本的 AFNetworking