iOS Swift POST参数和正文

时间:2017-06-07 11:12:04

标签: ios swift post

我试图将一个关键参数和一个JSON字典正文发布到一个API,但出于某种原因它不会起作用。

到目前为止,这是我的工作。 enter image description here

@IBAction func POST(_ sender: Any) {
    let url = URL(string: "http://apilink.com/updateProfile&=param")!
    let jsonObject = ["FName":"Tarik",
                      "LName":"Salama"]
    let jsonData = try! JSONSerialization.data(withJSONObject: jsonObject, options: [])

    var request = URLRequest(url: url)
    request.httpMethod = "post"
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")
    request.httpBody = jsonData

    let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
        if let error = error {
            print("error:", error)
            return
        }

        do {
            guard let data = data else { return }
            guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject] else { return }
            print("json:", json)
        } catch {
            print("error:", error)
        }
    }

    task.resume()
}

单击POST按钮时出现此错误:
错误:错误域= NSCocoaErrorDomain代码= 3840" JSON文本不是以数组或对象开头,而是选项允许未设置片段。" UserInfo = {NSDebugDescription = JSON文本不以数组或对象开头,并且选项允许未设置片段。}

我做错了什么? 在我检查了一些其他线程之后,我尝试更改了一些内容,例如将参数和数据字典放入一个键:值字典,但API响应并说数据无效,这意味着整个事件的格式不正确。 注意:我不允许使用像Alamofire这样的第三方库,API链接工作正常,如屏幕截图所示。

1 个答案:

答案 0 :(得分:0)

您可以通过打印回复数据来检查问题

do {
            guard let data = data else { return }
            print(String(data: data, encoding: .utf8) ?? "No Conversion") //Print Here
            guard let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: AnyObject] else { return }
            print("json:", json)
        } catch {
            print("error:", error)
        }

查看“打印在这里”行。我相信响应不是一个有效的json,所以当你试图将数据解析为JSOn时,它总是以catch块结束。