加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

AFNetworking JSON text did not start with array or 

(2016-06-15 15:04:07)
标签:

afnetworking

manager.responseseri

分类: iOS

使用AFNetworking 直接访问网页时,这样调用:    

[manager POST:@"http://www.baidu.com" parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {

        NSLog(@"uploadProgress %@", uploadProgress);

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        NSLog(@"sueecess");

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        NSLog(@"faile %@", error);

    }];


fails 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.}

这是因为AFNetworking把相应的结果当作json来处理,因为manager.responseSerializer 的[super setResponseSerializer:responseSerializer];是这样赋初值的,而去请求百度返回的并不是一个json的文本,所以AFNetworking会默认的将返回认为是json的结果去解析,然后没有办法解析成功,所以就会包上面的错误。

我们需要处理的就是和AFNetworking说这不是json的结果就好了

这时候 你必须告诉AFNetworking:别把这个网页当json来处理! 
在我们请求之前,我们必须要将manager.responseSerializer 设置成AFHTTPResponseSerializer 的形式

所以代码就变成了这样的:

    manager.responseSerializer = [AFHTTPResponseSerializer serializer];

    [manager POST:@"http://www.baidu.com" parameters:nil progress:^(NSProgress * _Nonnull uploadProgress) {

        NSLog(@"uploadProgress %@", uploadProgress);

    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        NSLog(@"sueecess");

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        NSLog(@"faile %@", error);

 

    }];

错误就结束了。。。。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有