【问题标题】:Sending POST request to API using Alamofire使用 Alamofire 向 API 发送 POST 请求
【发布时间】:2017-07-03 06:22:57
【问题描述】:

所以我为一个应用程序使用了一个 API,它可以帮助我存储事件的数据,我将数据发送到用户输入/选择的 API 存储它并取回一个 ID 以供以后参考。 这是我使用的一些代码。

API 接受 JSON

    {
   "topic":"test shedule",
   "setdate":"21-09-2017",
   "scheduledate":"22-09-2017",
   "settime":"09:00:00",
   "scheduletime":"10:00:00",
   "agenda":"hi this is test agenda",

   "adminname":"name",
   "type":"meeting",
    "users": "[{\"category\":\"optional\",\"email\":\"abc@gmail.com\"}]",
   "adminemail":"abc@gmail.com"
 }

我正在使用 Alamofire 发送数据\

let parameters: Parameters = [
            "topic":topicTextField.text!,
            "setdate":currentDate as String,
            "scheduledate":setDate as String,
            "settime":currentTime as String,
            "scheduletime":setTime as String,
            "agenda":agendaTextField.text!,
            "adminname":"abcname",
            "type":"meeting",
            "users" : "\(smembers)",
            "adminemail":"abc@gmail.com"
        ]

        Alamofire.request("\(baseURL)meeting_shedule.php",method: .post, parameters: parameters).responseJSON { response in
            if let dict = response.result.value as? Dictionary<String, AnyObject> {
                let topic = dict["topic"] as? String
                let g_id = dict["g_id"] as? String

                self.storeMeeting(topic: topic!, g_id: g_id!)

            }
        }

smembers 是从字典 selectedMembers 创建的数组,字典 selectedMembers 来自不同的 ViewController,使用 prepare for segue

    var selectedMembers = [String: String]()
    var smembers = [Any]()
    var selected = [String: String]()

if selectedMembers.isEmpty == false {
            for (key, value) in selectedMembers {
                selected = ["email":key, "category":value]
                smembers.append(selected)
            }
        }

问题

我正面临来自 api 的失败响应。 我认为问题在于将“用户”发送到 API,因为 API 正在以字符串形式请求数据,而我正在发送一个数组,我什至尝试通过序列化将 smembers 转换为 jsonstring 来解决这个问题,但仍然返回失败。

我收到的错误图片

当我像这样通过邮递员发送请求时,该 api 起作用。

我不知道如何解决这个问题,如何发送 API 将接受的数据。

感谢您的帮助

【问题讨论】:

    标签: arrays json swift3 alamofire


    【解决方案1】:

    改变逻辑如下图

      var selectedMembers = [String: String]()
        var smembers = [String]()
        var selected = ""
    
    if selectedMembers.isEmpty == false {
                for (key, value) in selectedMembers {
                    selected = String(format: "{\"\\email\\\":\"\\%@\"\\,\"\\category\"\\:\"\\%@\"\\}", arguments: [key,value])
                    smembers.append(selected)
                }
            }
    

    然后在你的帖子数据中

    let parameters: Parameters = [
                "topic":topicTextField.text!,
                "setdate":currentDate as String,
                "scheduledate":setDate as String,
                "settime":currentTime as String,
                "scheduletime":setTime as String,
                "agenda":agendaTextField.text!,
                "adminname":"abcname",
                "type":"meeting",
                "users" :"[\(smembers.joined(separator: ","))]",
                "adminemail":"abc@gmail.com"
            ]
    

    【讨论】:

    • 来自不同VC的数据是一个存储数据的字典,例如selectedMembers = [email: category]。这些数据如何进入您创建的课程我不明白?
    • 向我展示你如何将信息传递给该 api 调用的代码
    • 哦,它只是一个简单的 segue 准备,在 ViewControllers 之间传输 selectedMembers 看看我放在帖子中的最后一个代码
    • 在这里使用选定的用户 "users" : User.jsonArrayFromModels(selectedUsers)
    • 嗨@AmanChawla 你支持的团队,他们接受用户作为字符串而不是 JSON 数组,所以你必须将其作为字符串,我在我的答案中更新了代码检查一次
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2015-01-26
    相关资源
    最近更新 更多