1.在postman中测试以及安卓那边请求服务器完全ok,iOS就输出以下错误:
Error Domain=NSCocoaErrorDomain Code=3840 "Garbage at end." UserInfo={NSDebugDescription=Garbage at end.}
解决方法:让服务器开发人员多返回了不该返回的数据,将这些文件删除就可以正常访问了。
2.控制台打印:
Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}
第一种原因:查看你的Url是否填写正确
第二种原因:AFN网络请求返回的是json数据,出现这个类型的错误,说明返回的是非json格式,在你封装的网络请求基类中查看是否,添加以下代码:
//设置返回数据格式为JSON
manager.responseSerializer=[AFHTTPResponseSerializer serializer];
但是注意:如果设置了该属性,直接打印服务器返回的responseobjct是data格式,需要格式化一下,才能更清晰的看到服务器响应的数据结构
[[self shareManager] POST:url parameters:params success:^(AFHTTPRequestOperation * operation, id responseObject) {
NSLog(@"服务器response success=====%@", [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]);
} failure:^(AFHTTPRequestOperation * operation, NSError * error) {
NSLog(@"服务器response error==%@",error);
}];
3.使用AFN post提交json格式数据
正常情况下,我们只要传输一个字典模式的数据给后台就可以,但是如果提交一个表单数据,数据格式比较复杂,包含数组,我们还是传输一个字典的格式,后台无法解析我们传输的数组数据,但是将字典转json数据,也是不行的,需要将AFN的请求格式设置为json:
+ (AFHTTPRequestOperationManager *)shareManager{
@synchronized(self){
if (_manager == nil ) {
_manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:TLPServerAddress]];
_manager.responseSerializer = [AFHTTPResponseSerializer serializer];
_manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"image/jpeg",@"image/jpg",@"image/png",@"application/octet-stream",@"text/json",@"application/json",@"text/javascript",nil];
_manager.requestSerializer=[AFJSONRequestSerializer serializer];
}
}
return _manager;
}
数组或者字典转json字符串的方法
+ (NSString *)toJSONData:(id)theData
{
NSData *data = [NSJSONSerialization dataWithJSONObject:theData
options:NSJSONReadingMutableLeaves | NSJSONReadingAllowFragments|NSJSONWritingPrettyPrinted
error:nil];
if (data == nil) {
return nil;
}
NSString *string = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
return string;
}
网友评论