2014-09-23 26 views
25

Sono stato sempre il seguente errore quando si utilizza il metodo GET per recuperare un file da un server:"(valore non valido in tutto il carattere 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.} 

ho provato un certo numero di cose diverse e credo che potrebbe essere qualcosa a che fare con il formato JSON sul file che sto cercando di ottenere

Ecco il codice che ho usato:.

_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); 
    }]; 

Il mio metodo POST funziona correttamente non riesco a risolvere questo problema con GET. Qualche idea? Grazie.

+0

non possiamo aiutarvi senza vedere la richiesta GET effettiva, o almeno il valore di '_username'. i documenti dicono anche che il blocco di errore viene eseguito quando la risposta non può essere analizzata, quindi controlla anche la risposta. –

+0

ok, quindi ora che dire di 'operation.response'? –

+0

operation.responseSerializationError = errore: errore di parsing della stringa di riepilogo – Jonathan

risposta

36

A giudicare dalla discussione nei commenti sembra che la richiesta GET abbia esito positivo (codice di risposta 200), ma il corpo della risposta non è JSON valido (né un frammento JSON) come richiesto dall'uso di AFJSONResponseSerializer. Un codice base AFHTTPResponseSerializer può essere utilizzato per le risposte che non sono JSON.

+0

Grazie per l'aiuto Brad. Sono nuovo di JSON. Se carico un file come JSON sul server Apache, quando faccio una richiesta a GET non dovrebbe essere un JSON valido, o potrebbe essere modificato dal server? – Jonathan

+0

@ Jonathan Non sono sicuro di cosa stai chiedendo. non puoi caricare nulla tramite GET. l'errore che si ottiene è dovuto alla risposta * del server * alla richiesta GET, non alla richiesta GET stessa. GET richieste non sono in genere néson. le risposte per un server possono essere qualsiasi cosa. –

+0

No, intendevo dire che avevo caricato usando il metodo POST in cui ho usato JSON. Quindi se carico usando JSON posso scaricare con un serializzatore diverso? – Jonathan

2

Sono abbastanza sicuro di avere una risposta valida dal server, ma la tua risposta non è un formato valido in JSON, probabilmente perché hai i carachters di fronte al primo {. Prova questo: inserisci lo stesso indirizzo URL manualmente nel browser e vedrai il colpevole nella risposta. Spero che abbia aiutato.

-2

Hey ragazzi questo è quello che ho scoperto essere il mio problema: stavo chiamando Alamofire tramite una funzione per autenticare gli utenti: ho usato la funzione "Login utente" con i parametri che verrebbero chiamati dal "corpo" (email: String, password: String) che potrebbe essere trasferito

mia errr era esattamente:

opzionale (alamofire.aferror.responseserializationfailed (alamofire.aferror.responseserializationfailurereason.jsonserializationfailed (dominio errore = codice nscocoaerrordomain = 3840 "valore non valido in giro carattere 0. "userinfo = {nsdebugdescription = valore non valido attorno al carattere 0

carattere 0 è la chiave qui: significa che la chiamata per "email" non corrispondeva ai parametri: vedere il codice sottostante

func loginUser (email: String, password: String, completato: @escaping downloadComplete) { lasciare 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) 
       } 

"e-mail" in parametri di funzione deve corrispondere al let "email" durante l'analisi di allora sarà work..I più ottenuto l'errore ... E carattere 0, la "email" nel parametro "body" per la richiesta Alamofire:

Spero che questo aiuti

Problemi correlati