iOS开发关于使用AFN遇到的问题总结

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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,256评论 2 89
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,143评论 3 119
  • 我 们 去 打 蓝 球 Go,Go,Go, 我们去打篮球。 十人咱打全场, 俩人咱玩斗牛。 先别管作业, 尽情把汗...
    四季闻蝉阅读 219评论 0 3
  • 90后小伙相亲被女方花式拒绝!女方说就因为他穿了这双鞋? 一小伙和相亲对象见面 晚上回到家后 姑娘在微信上拒绝了他...
    学生神来啦阅读 255评论 0 0
  • Servlet Context 1. ServletContext接口介绍 ServletContext接口定义了...
    0x70e8阅读 266评论 0 0

友情链接更多精彩内容