【问题标题】:How To POST JSON Parameters Using AFNetworking?如何使用 AFNetworking 发布 JSON 参数?
【发布时间】:2016-03-29 19:58:41
【问题描述】:

我怎样才能POST JSON 参数与AFNetworking?下面是JSON 格式的示例。提前谢谢你。

{
    "application": {
        "identifier": "appDev"
    },
    "sso": {
        "version": 2.0,
        "session_expiry": 43200
    },
    "user": {
        "password": "xxxx~!@",
        "username": "xxx0min"
    },
    "coordinate": {
        "latitude": 10.9948629,
        "longitude": -169.5213749
    }
}

我成功创建了一个 JSON:

NSDictionary *parameters = @{@"application": @{@"identifier": @"appDev"}, @"sso": @{@"version": @"2.0", @"session_expiry":@43200}, @"user": @{@"password":@"xxxx~!@", @"username":@"xxx0min"}, @"coordinate": @{@"latitude":@10.9948629, @"longitude":@-169.5213749}};

【问题讨论】:

  • 将其转换为 NSDictionary 并将其作为参数发布,stackoverflow.com/questions/21487184/…
  • 默认情况下,requestSerializer[AFHTTPRequestSerializer serializer]。如果您的服务器旨在接收 JSON 请求,则需要 manager.requestSerializer = [AFJSONRequestSerializer serializer]
  • 这就是我所做的。但它不起作用。 NSDictionary *parameters = @{@"identifier": @"calendar-mobile", @"version": @"2.0", @"session_expiry": @43200, @"password": @"xxxx~!@", @ "用户名":@"xxx0min", @"纬度":@"10.9948629", @"经度":@"-169.5213749"};
  • 该字典与您在问题中列出的 JSON 不匹配,例如 @"identifier": @"calendar-mobile" 应该在 @{@"application" : @{@"identifier": @"calendar-mobile"}} 的字典中 - 如果您在问题中发布代码而不是只有 JSON 人可能会提供帮助

标签: ios json xcode afnetworking afnetworking-2


【解决方案1】:

首先将 JSON 字符串转换为 NSDictionary:

NSError *error;
NSData *objectData = [@"{\"1\":\"2\"}" dataUsingEncoding:NSUTF8StringEncoding];
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:objectData
                                      options:NSJSONReadingMutableContainers 
                                        error:&error];

然后您可以使用 AFNetworking 发送此词典。在版本 3 中,您应该使用 AFHTTPSessionManager:

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

[manager POST:@"your_URL" parameters:json progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSLog(@"Complete");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"Fail");
}];

【讨论】:

  • 感谢您的回答。为 AFNetworking 版本 3 点赞。
【解决方案2】:

我终于找到了解决问题的方法。我正在做的是为我的 JSON 参数制作 NSDictionary 的 NSDictionary。以下是完整的解决方案代码。

NSString *loginURL = @"http://myappdev.dev/login";

 NSDictionary *parameters = @{@"application": @{@"identifier": @"appDev"}, @"sso": @{@"version": @"2.0", @"session_expiry":@43200}, @"user": @{@"password":@"xxxx~!@", @"username":@"xxx0min"}, @"coordinate": @{@"latitude":@10.9948629, @"longitude":@-169.5213749}};

    NSLog(@"params : %@", parameters);

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    [manager POST:loginURL parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"JSON Successsss: %@", responseObject);
        NSLog(@"operation Successsss: %@", operation);
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"Error laaa: %@", error);
    }];

【讨论】:

    猜你喜欢
    • 2013-09-05
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多