**更新于20200903**
哈哈,才发现是4年前的3月9号写的这个,今天9月3号,这个CallBack还真不错。
言归正传,这个错误挺常见的,但是你一搜索,会出现好多答案让你尝试,但其实遇到的都是不一样的问题。
比如说约定返回就不需要接送 :https://blog.csdn.net/asuno_1/article/details/82225687
有的是跟Https有关,像这样:
AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init]
[securityPolicy setAllowInvalidCertificates:YES];
在评论区 Lin__Chuan 同学已经说的很明白了,这个错误的问题就是因为返回值不是 Json。导致它的原因多种多样,服务端程序问题返回了错误的内容,或者前端请求的 URL错误,缺失必要参数等等都有可能。当你遇到这个问题时,建议先解析一下那个返回的 NSData,搂一眼,你应该就能找到问题,答案就不言自明了。
NSString *parseData = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];
***************
**以下是原文,写于20160309**
由于项目需要,开始使用AFNetWorking的AFHTTPSessionManager,原谅小弟项目用的还是NSURLConnection。贴点代码
AFJSONRequestSerializer *rqSerializer = [AFJSONRequestSerializer serializerWithWritingOptions:0];//NSJSONWritingPrettyPrinted
rqSerializer.stringEncoding = NSUTF8StringEncoding;
AFJSONResponseSerializer *rsSerializer = [AFJSONResponseSerializer serializer];
rsSerializer.stringEncoding = NSUTF8StringEncoding;
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = rsSerializer;
manager.requestSerializer = rqSerializer;
通过post请求发出去总是获得下面这样的错误。百度了N多的办法,也没能找到彻底的原因,无奈之下只能戳进去看AF的代码。
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.}
找到这么一句话:[mutableRequest setHTTPBody:[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]];
好在我是对着之前的代码改的,在对比打印了[NSJSONSerialization dataWithJSONObject:parameters options:self.writingOptions error:error]的data和之前
// NSString *jsonStr1 = [NSString jsonStringWithDictionary:parameters];
// NSData *data1 = [jsonStr1 dataUsingEncoding:NSUTF8StringEncoding];
之后,发现data不一致,导致发出去的请求服务器那边不识别,这个时候,直觉告诉我json拼的格式有问题,但是iOS官方就提供这么一个方法。找了找API说明,发现了这个
为了好看,NSJSONWritingPrettyPrinted这个模式下生成的son串是带空格的,所以编成data之后长度变长了,服务器那边解不了。尝试了下,把这个参数改成0,就像我上边代码设置的。
AF使用人群那么多,用法啥的就不用介绍了,小弟也才开始用上它,就一个感觉,牛逼的代码就是牛逼。