美文网首页iOS开发iOS DeveloperiOS 开发
使用AFNetworking遇到3840错误的解决方法

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

作者: kuai空调 | 来源:发表于2016-04-01 11:23 被阅读6053次

    总结一个工作中遇到的坑。后端返回的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

    相关文章

      网友评论

      • KnightQ丶:下边这个方法是放在什么地方啊
      • Missmiss懵:有没有试过用AFHTTPSessionManager的时候怎么解决这个问题
        Roy丶丶:心里苦
      • 心里苦啊:不是说要推卸什么的, 这个问题真该服务器的同志去搞, 你这样改虽然可以用了, 不知道你有没有用cocoapods管理第三方库, 你这样搞。。。
        Mr_某某某:安卓好解决,直接关闭302跳转.苹果没法子处理.我这边登录,返回一串html的页面.我也是服了.
        kuai空调:@心里苦啊 真的是心里苦啊,人家就一句话,安卓work了,你自己想办法吧……咋办……
      • 85973c3d2045:这个还是应该让后台哥们来调。前端的话会遇到各种问题。而且还不容易统一。
        kuai空调:@gaoyuhang 我也是跟后台哥们说了,然而人家并不能解决……毕竟产品要上线

      本文标题:使用AFNetworking遇到3840错误的解决方法

      本文链接:https://www.haomeiwen.com/subject/juhylttx.html