2014-09-23 6 views
25

Я получаю следующее сообщение об ошибке при использовании метода GET для получения файла с сервера:(Cocoa ошибка 3840.)»(недопустимое значение вокруг символа 0.) AFNetworking

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 работает fi северо-восток Я просто не могу решить эту проблему с помощью GET. Есть идеи? Спасибо.

+0

Мы не можем помочь вам, не видя фактического запроса GET или, по крайней мере, значения '_username'. в документах также говорится, что блок отказа выполняется, когда ответ не может быть проанализирован, поэтому также проверьте ответ. –

+0

Итак, как насчет 'operation.response'? –

+0

operation.responseSerializationError = ошибка: сводная строка parsing error – Jonathan

ответ

36

Судя по обсуждению в комментариях, кажется, что ваш запрос GET успешный (код ответа 200), но тело ответа недействительно JSON (или фрагмент JSON) по вашему запросу AFJSONResponseSerializer. Базовый AFHTTPResponseSerializer может использоваться для ответов, которые не являются JSON.

+0

Благодарим за помощь Брэда. Я новичок в JSON. Если я загружу файл как JSON на сервер Apache, когда я выполняю запрос GET, если он не является допустимым JSON или может быть изменен сервером? – Jonathan

+0

@ Джонатан. Я не уверен, что вы просите. вы не можете загружать что-либо через GET. ошибка, которую вы получаете, связана с ответом сервера * на ваш запрос GET, а не с вашим запросом GET. Запросы GET также обычно не являются json. Ответы для сервера могут быть вообще чем угодно. –

+0

Нет. Я имел в виду, что я загрузил, используя метод POST, где я использовал JSON. Итак, если я загружу с помощью JSON, я могу скачать его с помощью другого сериализатора? – Jonathan

2

Я уверен, что у вас есть действительный ответ от сервера, но ваш ответ не является допустимым форматом в JSON, возможно, потому, что у вас есть качалки перед первым {. Попробуйте следующее: поместите тот же URL-адрес вручную в свой браузер, и вы увидите виновника в ответе. Надеюсь, это помогло.

-2

Привет, ребята, это то, что я нашел своей проблемой: я звонил в Alamofire через функцию аутентификации пользователей: я использовал функцию «Login User» с параметрами, которые будут вызываться из «тела» (электронная почта: Строка, пароль: 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) 
       } 

«электронная почта» в параметрах функции должны соответствовать пусть «электронная почта» при разборе, то он не будет work..I больше не получил ошибку ... И символ 0 был «электронная почта» в параметре «тело» для запроса Alamofire:

Надеюсь, что это поможет

Смежные вопросы

 Смежные вопросы