iOS使用AFNetworking遇到3840错误的解决方法

释放双眼,带上耳机,听听看~!

总结一个工作中遇到的坑。后端返回的JSON明明是成功,但是始终被解析为错误,并返回3840错误。这个错误通常是因为返回的数据格式不正确,但是抓包显示的确是JSON串,但是在JSON串之前有15行是空白的!!!!

开始认为是后端数据的问题,跟后端哥们调试了6个小时无果,最后还是得前端自己解决。第一个想法就是将返回的JSON文本去首尾空行空格再进行序列化。于是,在失败的block中拿到请求结果的字符串

NSString *responseStr = operation.responseString;

这个opertion变量来自AFN框架的下面这个方法

- (AFHTTPRequestOperation *)POST:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{
AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithHTTPMethod:@"POST" URLString:URLString parameters:parameters success:success failure:failure];
[self.operationQueue addOperation:operation];
return operation;
}

通过下面这个方法过滤字符串中的换行和空格(感谢woaifen3344)

- (NSDictionary *)dictionaryWithJsonString:(NSString *)jsonString {
if (jsonString == nil) {
return nil;
}
jsonString = [jsonString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
if(err) {
NSLog(@"json解析失败:%@",err);
return nil;
}
return dic;
}

通过这个方法返回的就是正常解析的OC字典了,ru guo

人已赞赏
iOS文章

iOS 多线程_NSThread

2020-1-18 16:42:50

iOS文章

iOS蓝牙框架CoreBluetooth应用

2020-1-18 16:48:40

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索