无法在 ios 中使用 afnetworking 发布 JSON

Posted

技术标签:

【中文标题】无法在 ios 中使用 afnetworking 发布 JSON【英文标题】:Unable to post JSON Using afnetworking in ios 【发布时间】:2015-09-08 07:26:21 【问题描述】:

我在将 json 发布到 url 时收到此错误:

 Invalid top-level type in JSON write'

我什至使用 afnetworking 发布请求代码发送完美的 JSON 但它一直给我错误。

我的代码:

NSString *  serviceType = @"xyz";
NSString *  remarks =@"project deadline is near ";
NSString *  emailId = @"xyx.live.com";


NSDictionary *params =
@ 
    @"serviceType" :serviceType,
    @"remarks" :remarks,
    @"emailId" :emailId

;

NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params
                                                   options:0 
                                                     error:&error];


NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];



AFHTTPRequestOperationManager *manager2 = [AFHTTPRequestOperationManager manager];
AFJSONRequestSerializer *serializer = [AFJSONRequestSerializer serializer];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[serializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
manager2.requestSerializer = serializer;



[manager2 POST:@"http://xyx.com" parameters:jsonString success:^(AFHTTPRequestOperation *operation, id responseObject) 
     NSLog(@"JSON_post_fzzlogin: %@", responseObject);
 failure:^(AFHTTPRequestOperation *operation, NSError *error) 



    //here is place for code executed in success case
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error while sending POST"
                                                        message:@"Sorry, try again."
                                                       delegate:nil
                                              cancelButtonTitle:@"Ok"
                                              otherButtonTitles:nil];
    [alertView show];

    NSLog(@"Error: %@", error);

];

请在这方面帮助我。在此先感谢

【问题讨论】:

【参考方案1】:

您尝试对请求进行两次编码,因为您为AFHTTPRequestOperationManager 设置了请求序列化程序,并将参数作为编码的 JSON 字符串提供。因此,如果您想使用请求序列化器或不使用它并手动编码为 JSON,则需要提供原始参数。

【讨论】:

【参考方案2】:

这就是您发布 JSON 或 AFNetworkingNSDictionary 的方式

NSDictionary *dict = @@"Key":@"Value";
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:[Util urlAppend:kListOfArticleCatagory] parameters:dict success:^(AFHTTPRequestOperation *operation, id responseObject) 

NSDictionary *responseObj = (NSDictionary *)responseObject;//casting to NSDictionary from id
NSLog(@"%@",responseObj);

 failure:^(AFHTTPRequestOperation *operation, NSError *error) 
    NSLog(@"Something went wrong :%@",operation.responseString);

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

您不通过AFNetworking 发布JSON,而是通过NSDictionary 作为参数发布,它会在您发布时转换为JSON。

【讨论】:

以上是关于无法在 ios 中使用 afnetworking 发布 JSON的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 无法在 ios iPad 中下载多个 m4a 文件

无法使用 AFNetworking 将 iOS 连接到 asp.net webservices

iOS10 无法再通过 AFNetworking/NSURLConnection 进行身份验证?

IOS如何在目标c中将AFNetworking添加到我的xcode项目中

iOS 使用AFNetworking 设置cookie

AFNetworking 在 iOS 6 下停止工作