Alamofire.request(.GET, "url").authenticate(user: "", password: "").responseJSON() {
    (request, response, json, error) in
    println(error)
    println(json)

}

Esta es mi petición con Alamofire, para una determinada solicitud a veces funciona, pero a veces tengo:

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

He leído que esto puede ser debido a no válida JSON, pero la respuesta es estática cadena json que me han validado en JSON validador como válido. Contiene å ä ö personajes y algo de HTML.

¿Por qué estoy recibiendo este error a veces?

  • Una cosa que me gusta hacer cuando me sale este error es un comentario fuera de la responseJSON() { ... } bloque y reemplazar con .responseString { _, _, s, _ in println(s) }. Que le permite ver el json devuelto a buscar cualquier extraño texto que haría unparsible por responseJSON
  • ¿Qué es el código de estado de respuesta?
  • Puedo obtener un código de estado 200 y me sale este error. AHHH. La muerte cerebral en mi caso :). Yo no estaba de regresar JSON del servidor. Que lo soluciona.
  • puede ser que esto funciona si uso .Método POST.

18 Comentarios

  1. 120

    Yo también enfrentan el mismo problema. Traté de responseString en lugar de responseJSON y funcionó. Supongo que esto es un error en Alamofire con su uso con django.

    • Gracias por decírmelo. Yo estaba usando responseJSON reales, pero la respuesta del servidor en formato XML! Me salvó el dolor de cabeza 🙂
    • Salvó mi día 🙂
    • guarda mi proyecto después de horas frente a este problema.Tengo que dar la respuesta en formato JSON dentro de mi servidor. Yo no estaba haciendo esto, pero una vez que lo hice, yo podría usar responseJSON de alamofire
    • Si usted está usando GET entonces usted necesita para comprobar con responseString sólo de lo contrario, para el puesto de control es el uso de responseJSON. Referencia: grokswift.com/updating-alamofire-to-swift-3-0
    • He perdido clientes, porque de este problema en mi app de iOS.
    • Thakkar ¿cómo analizar la respuesta json de la cadena?, im recibir esta respuesta, pero no puedo utilizar responseJSON debido a la mensaje de error html pero tengo que procesar el json de todos modos «<br />\n<b>Aviso:</b>: Undefined offset: 0 <b>servidor de archivo/</b> on line <b>357</b><br />\n<br />\n<b>Aviso:</b>: Undefined offset: 0 <b>servidor de archivo/</b> on line <b>358</b><br />\n{\»status\»:\»el éxito\»,\»desc\»:\»todos los proceed»,\»data\»:[{\»token\»:\»eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1nij9.eyJpc3MiOiJyZW50aS5teCIsImF1ZCI6imh0dhbzolwvxc9yzw50as5tecisimlhdci6mtq5mzywmzy2mcwizxhwijox\»}]}»
    • Su respuesta está en mal estado con html, es necesario analizar el html y obtener la cadena json a cabo, y convertirlo en un diccionario. Te recomiendo probar SwiftSoup o para mejores alternativas para parseHtml la mirada en stackoverflow.com/questions/31080818/….
    • de decisiones sobre el cambio de nuevo regresan este error The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable. si bien es wokring bien en Postman
    • se puede poner la esencia de su fragmento de código y también me dicen que el código de estado que usted está consiguiendo.
    • Creo que fue hecho. No recuerdo :p
    • La autorización es necesario aplicar con fuerza, a continuación, usted no necesita cambiar a «responcestring» Mantener responseJSON como es.
    • GRACIAS! Esto era exactamente lo que necesitaba!

  2. 9

    Tengo el mismo error al subir la imagen en el formulario multipart en Alamofire como yo estaba usando

    multipartFormData.appendBodyPart(data: image1Data, name: "file")

    me fijo mediante la sustitución por

    multipartFormData.appendBodyPart(data: image1Data, name: "file", fileName: "myImage.png", mimeType: "image/png")

    Espero que esto ayude a alguien.

    • Pasé horas tratando de entender esto. Me pregunto por qué esta solución funciona… Gracias!!
  3. 6

    El mismo problema me pasó a mí y que en realidad terminó siendo un problema del servidor ya que el tipo de contenido no se ha establecido.

    La adición de

    .validate(contentType: ["application/json"])

    A la solicitud de la cadena resuelto para mí

    Alamofire.request(.GET, "url")
            .validate(contentType: ["application/json"])
            .authenticate(user: "", password: "")
            .responseJSON() { response in
                switch response.result {
                case .Success:
                    print("It worked!")
                    print(response.result.value)
                case .Failure(let error):
                    print(error)
                }
            }
  4. 6

    De mayo de este modo, el

    Alamofire.request(.GET, "YOUR_URL")
         .validate()
         .responseString { response in
             print("Success: \(response.result.isSuccess)")
             print("Response String: \(response.result.value)")
         }
    • La misma solución que el aceptado la respuesta de 2015…
    • Sí Bro.me inspiró de su respuesta. acabo de subir el código para cualquier fresca
  5. 4

    Tengo el mismo error. Pero he encontrado la solución para ello.

    NOTA 1: «no es Alarmofire error», es bcouse de error del servidor.

    NOTA 2: no es necesario cambiar «responseJSON» a «responseString».

    public func fetchDataFromServerUsingXWWWFormUrlencoded(parameter:NSDictionary, completionHandler: @escaping (_ result:NSDictionary) -> Void) -> Void {
    
            let headers = ["Content-Type": "application/x-www-form-urlencoded"]
            let completeURL = "http://the_complete_url_here"
            Alamofire.request(completeURL, method: .post, parameters: (parameter as! Parameters), encoding: URLEncoding.default, headers: headers).responseJSON { response in
    
                if let JSON = response.result.value {
                    print("JSON: \(JSON)") //your JSONResponse result
                    completionHandler(JSON as! NSDictionary)
                }
                else {
                    print(response.result.error!)
                }
            }
        }
  6. 3

    Esto es cómo me las arreglé para resolver el Inválido 3840 Err.

    El registro de error de

     responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}))
    1. Fue con Codificación Tipo de las utilizadas en la Solicitud, El Tipo de Codificación utilizado debe ser acceptedin su el Lado del Servidor.

    En orden a conocer la Codificación tuve que correr a través de todos los Tipos de Codificación:

    default/
    methodDependent/
    queryString/
    httpBody

        let headers: HTTPHeaders = [
            "Authorization": "Info XXX",
            "Accept": "application/json",
            "Content-Type" :"application/json"
        ]
    
        let parameters:Parameters = [
            "items": [
                    "item1" : value,
                    "item2": value,
                    "item3" : value
            ]
        ]
    
        Alamofire.request("URL",method: .post, parameters: parameters,encoding:URLEncoding.queryString, headers: headers).responseJSON { response in
            debugPrint(response)
         }
    1. También depende de la respuesta estamos recibiendo el
      • responseString
      • responseJSON
      • responseData

    Si la respuesta no es un JSON & sólo de cadena en respuesta uso responseString

    Ejemplo: en caso de inicio de sesión/crear el token de API :

    «20dsoqs0287349y4ka85u6f24gmr6pah»

    responseString

  7. 2

    He resuelto usando esto como encabezado:

    let header = ["Content-Type": "application/json",
    "accept": "application/json"]

  8. 1

    Tal vez es demasiado tarde, pero he resuelto este problema de otra manera no se mencionan aquí:

    Cuando se utiliza .responseJSON(), debe establecer el encabezado de respuesta con content-type = application/json, si no, va a crash incluso si su cuerpo es válido JSON. Así, tal vez su encabezado de respuesta están vacías o a través de otro tipo de contenido.

    Asegúrese de que su encabezado de respuesta se establece con content-type = application/json a .responseJSON() en Alamofire funcione correctamente.

  9. 1

    Hola chicos esto es lo que he encontrado para ser mi problema: me estaba llamando Alamofire a través de una función de Autenticar a los Usuarios: he utilizado la función «inicio de Sesión de Usuario» Con los parámetros que habría de ser llamado desde el «cuerpo»(email: String, password: String) Que sería aprobada

    mi errr fue exactamente:

    optional(alamofire.aferror.responseserializationfailed(alamofire.aferror.responseserializationfailurereason.jsonserializationfailed(error de dominio=nscocoaerrordomain código=3840 «valor no válido alrededor de carácter 0.» userinfo={nsdebugdescription=valor no válido alrededor de carácter 0

    carácter 0 es la clave aquí: el significado de la convocatoria para el «correo electrónico» no coincidan con los parámetros: Ver el código de abajo

    func loginUser(email: String, password: String, completó: @escapar downloadComplete) {
    vamos a lowerCasedEmail = correo electrónico.convertidas a minúsculas()

        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)
                    }

    «correo electrónico» en los parámetros de la función debe coincidir con el que el «correo electrónico» al analizar, a continuación, se va a trabajar..yo ya no tengo el error…Y el carácter 0 fue el «correo electrónico» en el «cuerpo» de los parámetros para el Alamofire solicitud:

    Espero que esto ayude

  10. 1

    Error fue resuelto después de la adición de codificación: JSONEncoding.por defecto con Alamofire.

      Alamofire.request(urlString, method: .post, parameters: 
      parameters,encoding: 
      JSONEncoding.default, headers: nil).responseJSON {  
       response in
       switch response.result {
                       case .success:
                        print(response)
                        break
    
                        case .failure(let error):
                         print(error)
            }
       }
  11. 1

    En mi caso , mi dirección URL del servidor de era incorrecta. Compruebe su dirección URL del servidor !!

  12. 0

    La aplicación en el que estaba trabajando esta mañana en el mismo error. Yo creía que para ser un servidor de error ya que yo era incapaz de subir una imagen del usuario.

    Sin embargo, al comprobar mi API personalizado, me di cuenta de que después de la adición de un certificado SSL para mi sitio web que yo no había actualizado la api.swift Url, los datos no pudo post:

    let HOME_URL = "http://sitename.io"
    let BASE_URL = "http://sitename.io/api"
    let UPLOAD_URL = "http://sitename.io/api/user/upload"

    He cambiado la URL https://. Problema resuelto.

  13. 0

    En mi caso tengo que agregar esta Clave: «Aceptar»:»application/json» a mi solicitud de encabezado.

    Algo como esto:

    let Auth_header: [String:String] = ["Accept":"application/json", "Content-Type" : "application/json", "Authorization":"Bearer MyToken"]

    Espero que esto pueda ayudar a alguien.

  14. 0

    Estaba enviando la indebida tipo (String) para el servidor en mi parámetros (necesario para ser un Int).

  15. 0

    Me enfrento a un mismo tema y el problema está en params.

    let params = [kService: service,
                      kUserPath: companyModal.directory_path,
                      kCompanyDomain: UserDefaults.companyDomain,
                      kImageObject: imageString,
                      kEntryArray: jsonString,
                      kUserToken:  UserDefaults.authToken] as [String : Any]

    companyModal.directory_path es url. es coaccionado de cadena para cualquiera que crea problemas en el lado del servidor. Para resolver este problema que tengo para dar valor predeterminado que se hacen de la cadena de valor.

     let params = [kService: kGetSingleEntry,
                      kUserPath: companyModal.directory_path ?? "",
                      kCompanyDomain: UserDefaults.companyDomain,
                      kUserToken: UserDefaults.authToken,
                      kEntryId: id,
                      ] as [String: Any]
  16. 0

    Probable que usted tenga «/» al final de su camino. Si no es la petición GET, no debería poner «/» al final, de lo contrario obtendrá el error

  17. 0

    He Cambiado mimeType de «mov» a «multipart/form-data».

    Alamofire.upload(multipartFormData: { (multipartFormData) in
                do {
                    let data = try Data(contentsOf: videoUrl, options: .mappedIfSafe)
                    let fileName = String(format: "ios-video_%@.mov ", profileID)
                    multipartFormData.append(data, withName: "video", fileName: fileName, mimeType: "multipart/form-data")
    
                } catch  {
                    completion("Error")
                }
            }, usingThreshold: .init(), to: url,
               method: .put,
               headers: header)

    Trabajado para mí.. 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here