AFNetworking 2.0 POST请求的问题

时间:2013-11-03 23:38:39

标签: ios post afnetworking

我是iOS和AFNetworking的新手。我已经习惯了Titanium以及在Javascript中使用类似于xhr的模型发布和获取数据的非常简单的方法。我向我的服务器发送一个Post请求并返回JSON。它在Titanium中完美无瑕地工作,但是我有点时间让它在本地工作。

在对Titanium的后端进行一些调查后,看起来他们正在使用ASI,我觉得这很有趣。现在似乎AFNetworking是另一种选择,因为ASI不再被更新。但是,当我发送下面的请求时,它会收到text / html响应而不是JSON响应。我猜这是因为参数以及它们的发送方式。

在另一个StackOverflow问题上,该人需要向服务器提供标准的post变量,服务器使用JSON进行响应,这正是我需要做的。建议是在你的AFHTTPClient中设置“parameterEncoding to AFFormURLParameterEncoding”,但我不知道该怎么做。如果有人能帮我解决这个问题,我将永远感激不尽。我可以提供实际的帖子地址和虚拟用户/通行证,如果这有助于任何人解决这个问题。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"username": @"dummyusername",@"password":@"dummypassword"};
NSString *URLString = @"https://www.webaddress.com/index.php?ACT=71";
[manager POST:URLString parameters:parameters constructingBodyWithBlock:^( id<AFMultipartFormData> parameters ){} success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  NSLog(@"Error: %@", error);
}];

3 个答案:

答案 0 :(得分:4)

在AFNetworking 2.1中,您可以创建AFHTTPRequestOperationManager作为实例变量,在视图控制器的viewDidLoad(或对象中的设置方法)中初始化它,设置请求序列化程序,然后通过实例变量发出请求。

工作示例:

// Creation
-(void)setup {
    url = [NSURL URLWithString:kMediaURLString];

    manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:url];
    manager.requestSerializer = [AFHTTPRequestSerializer serializer];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
}

...

-(void)makeRequestWithObject:(id)obj {
    // Create your parameters
    NSDictionary *params = @{ @"someParameter" : obj };

    // Create a path (relative to your manager's baseURL)
    NSString *urlString = [NSString stringWithFormat:kCreatePath, postPath];

    // Post the request to urlString with params, handle success or failure
    [manager POST:urlString
       parameters:params
          success:^(AFHTTPRequestOperation *operation, id success){
              // Do stuff on success
          }failure:^(AFHTTPRequestOperation *operation, NSError *error) {
              // Do stuff on failure
          }];
}

答案 1 :(得分:0)

我没有按照你的方式使用AFNetworking,但我猜你的问题与服务器不知道它应该发送JSON响应有关。您可以将'accept'标题更改为'application / json'。

看看this AFNetworking教程,它对我帮助很大:))

答案 2 :(得分:-1)

你可以像这样使用AFNetworking。

AFHTTPClient *httpClient = [[AFHTTPClient alloc] init];
NSDictionary *parameter = @{@"username":@"dummyusername", @"password":@"dummypassword"};
[httpClient setParameterEncoding:AFJSONParameterEncoding];
[httpClient registerHTTPOperationClass:[AFJSONRequestOperation class]];

[httpClient postPath:@"https://www.webaddress.com/index.php?ACT=71" parameters:parameter success:^(AFHTTPRequestOperation *operation, id responseObject) {
// Print the response body in text
BOOL *success = [[responseObject objectForKey:@"success"] boolValue];
NSLog(@"Response: %@",responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
[self handleConnectionError:error];
}];