swift - как получить ответ JSON с сервера - PullRequest
0 голосов
/ 29 августа 2018

Я отправляю эти данные на сервер и хочу, чтобы они ответили. Пробовал этот код, но он не работает.

    let parameters = [ "imie" : (imie), "nazwisko" : (nazwisko), "telefon" : (telefon), "adres" : (adres), "miasto" : (miasto), "kod" : (kod), /*"powiat" : (powiat), "wojewodztwo" : (wojewodztwo),*/ "opis" : (selectedvalue)   ]


    let url = URL(string: "http://www.hetman.pl/post1.php")!
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    request.setValue("application/json", forHTTPHeaderField: "Accept")
    request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.setBodyContent(parameters)

    let task = URLSession.shared.dataTask(with: request as URLRequest) { data, response, error in
        if error != nil{
            return
        }

        do{
            let t = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]
            print(t as? String)
        } catch{
            print("Error 43 -> \(error)")
        }


    }

Запрос верен, и сервер обрабатывает данные должным образом, но ответ выдает мне эту ошибку:

Error 43 -> Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 3." UserInfo={NSDebugDescription=Invalid value around character 3.}

Итак, вопрос в том, как мне получить данные с сервера?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Пожалуйста, проверьте, является ли ответ от этого URL только JSON. Возможно, вы получаете XML или строковый ответ.

Попробуйте ниже строки, если вы получаете Строка ответ:

let stringResponse = String(data: data!, encoding: String.Encoding.utf8) as String!

Попробуйте ниже строки, если вы получаете XML ответ:

let xmlDictionary = try XMLSerialization.xmlObject(with: data!) as? [String: Any]
0 голосов
/ 29 августа 2018

Почему существует тип контента?

// code 3840, data.length = 1 byte, so empty and no error
  1. request.setValue("application/x-www-form-urlencoded; charset=utf-8", forHTTPHeaderField: "Content-Type")

  2. request.addValue("application/json", forHTTPHeaderField: "Content-Type")

Удалите первое поле заголовка типа контента и попробуйте только:

request.addValue("application/json", forHTTPHeaderField: "Content-Type")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...