swift error "Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 1."

14,577

Solution 1

Adding .json at the end of the URL endpoint has solved the error. ie https://www.example.com/rest/user/login.json

Solution 2

This is an error stating that the response from the server is not valid JSON and contains unreadable characters (e.g. html) Basically it means that your upload did not go well (not accepted by server and therefore not showing json response) or that you did not setup the json response correctly and that it contains html. You can check the latter by looking at the page in your browser and checking the source.

Hope this helps!

Ps: I assume you are using a working URL in your real code right? ;-)

Solution 3

I got this error when the problem was actually an import error in django on the server side. By following tcp stream in wireshark I got this:

'ImportError': <type 'exceptions.ImportError'>,

Share:
14,577
Dimitri T
Author by

Dimitri T

Updated on June 28, 2022

Comments

  • Dimitri T
    Dimitri T almost 2 years

    I am having trouble fixing this error message on my Swift Alamofire POST request (to login a user).

    '3840' "Invalid value around character 1."

    I have imported Foundation, Alamofire, SwiftyJson. There are no authorisation restrictions (no Oauth etc). I'm also getting the same error message when I change the Post (eg to another endpoint, with other parameters and values) but keep the rest of the code/format the same. On my drupal7 REST server 'definitions' it lists the endpoint as /rest/user/login and parameters as 'username' and 'password' strings as I've used.

    I'd really appreciate any tips and help?

    error calling REQUEST Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 1." UserInfo={NSDebugDescription=Invalid value around character 1.}

    This is my code

     @IBAction func loginButtonTapped(sender: AnyObject) {
    
        //using Alamofire
    
        let dataEndpoint: String = "https://www.example.com/rest/user/login"
        let newData = ["username":"Mickey", "password":"123"]
        Alamofire.request(.POST, dataEndpoint, parameters: newData, encoding: .JSON)
            .responseJSON { response in
                guard response.result.error == nil else {
                    // got an error in posting the data, need to handle it
                    print("error calling REQUEST")
                    print(response.result.error!)
                    return
                }
    
                guard let value = response.result.value else {
                    print("no result data  when calling request")
                    return
                }
                let data = JSON(value)
                print("The result is: " + data.description)
        }
    
    }
    

    Thank you

  • Dimitri T
    Dimitri T almost 8 years
    Thank you, I will check whether the server received the data or not. (Yes, that is a working URL in the real code)