(可可误差3840。)" (字符0周围的值无效。)AFNetworking

时间:2014-09-23 02:54:18

标签: ios objective-c json cocoa-touch afnetworking-2

使用GET方法从服务器检索文件时,我遇到以下错误:

Error: Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x16e81ed0 {NSDebugDescription=Invalid value around character 0.}

我尝试了很多不同的东西,我相信它可能与我想要获得的文件上的JSON格式有关。

以下是我一直在使用的代码:

_username = @"JonDoe";
NSDictionary *parameters = @{ @"username" : _username};
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];

[manager GET:@"http://.........."
  parameters:parameters
     success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSLog(@"JSON: %@", responseObject);
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"Error: %@", error);
     }];

我的POST方法运行正常。我似乎无法用GET解决这个问题。有任何想法吗?谢谢。

3 个答案:

答案 0 :(得分:39)

根据评论中的讨论判断,您的GET请求似乎成功(响应代码200),但响应正文不是您使用{{1}请求的有效JSON(也不是JSON片段) }。基本AFJSONResponseSerializer可用于非JSON的响应。

答案 1 :(得分:3)

我很确定你有来自服务器的有效回复,但你的回复不是JSON中的有效格式,可能是因为你在第一个{前面有carachters。 请尝试这样做:在浏览器中手动输入相同的URL地址,您将看到响应中的罪魁祸首。希望它有所帮助。

答案 2 :(得分:-2)

嘿伙计这就是我发现的问题:我通过一个功能来验证用户呼叫Alamofire:我使用了功能"登录用户"使用将从" body"(email:String,password:String)调用的参数将传递

我的错误完全是:

可选(alamofire.aferror.responseserializationfailed(alamofire.aferror.responseserializationfailurereason.jsonserializationfailed)(错误域= nscocoaerrordomain代码= 3840"字符0周围的值无效。" userinfo = {nsdebugdescription =字符0周围的无效值

字符0是这里的关键:意味着呼叫"电子邮件"与参数不匹配:请参阅下面的代码

func loginUser(email:String,password:String,completed:@escaping downloadComplete){         让lowerCasedEmail = email.lowercased()

    let header = [
        "Content-Type" : "application/json; charset=utf-8"
    ]
    let body: [String: Any] = [
        "email": lowerCasedEmail,
        "password": password
    ]

    Alamofire.request(LOGIN_USER, method: .post, parameters: body, encoding: JSONEncoding.default, headers: header).responseJSON { (response) in
        if response.result.error == nil {

            if let data = response.result.value as? Dictionary<String, AnyObject> {
                if let email = data["user"] as? String {
                    self.userEmail = email
                    print(self.userEmail)
                }
                if let token = data["token"] as? String {
                    self.token_Key = token
                    print(self.token_Key)
                }

&#34;电子邮件&#34;在函数参数中必须匹配let&#34; email&#34;解析然后它将工作..我不再有错误...而字符0是&#34;电子邮件&#34;在&#34;身体&#34; Alamofire请求的参数:

希望这有帮助