无法在 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 或 AFNetworking
NSDictionary
的方式
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 进行身份验证?