【问题标题】:Executing a POST request within a loop Swift 4在循环 Swift 4 中执行 POST 请求
【发布时间】:2018-08-15 00:05:40
【问题描述】:

我想向我拥有的 Web 服务器发出多个 POST 请求,该服务器在我的数据库的表中插入一条新记录。这将根据用户输入的练习量重复进行。

我有一个POST 请求的函数,如下所示。

    func submitDetails(split_id:Int, day:String, name:String, set:String, rep:String)
{
    var request = URLRequest(url: URL(string: "LINK OF WEB SERVICE")! as URL)
    request.httpMethod = "POST"
    let postString = "id=\(split_id)&day=\(day)&name=\(name)&sets=\(set)&reps=\(rep)"
    print("Post string - \(postString)")
    request.httpBody = postString.data(using: String.Encoding.utf8)

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

        if error != nil
        {
            print("error=\(String(describing: error))")
            return
        }

        print("response = \(String(describing: response))")

        let responseString = String(data: data!, encoding: String.Encoding(rawValue: String.Encoding.utf8.rawValue))
        print ("responseString =\(String(describing: responseString))")
    }
    task.resume()
}

这是在循环中调用的,

for x in 0...MainMenuViewController.myVariables.day1NoExercise - 1
            {
                self.submitDetails(split_id: MainMenuViewController.myVariables.new_split_id, day: self.dayName.text!, name: self.exerciseName[x].text!, set: self.exerciseSets[x].text!, rep: self.exerciseReps[x].text!)
            }

目前,只有用户输入数据的第一个练习被插入到数据库中。似乎它正在执行所有代码太快。我希望有人理解这一点并可以帮助我!

【问题讨论】:

    标签: ios swift urlrequest urlsession


    【解决方案1】:
    • 对于 API 调用始终运行异步请求
    • 使用后台线程帮助您的应用程序保持响应速度
    • 使用编译块显示错误
    • 显示进度条或类似的东西让用户知道你正在做某事
    • 为您的服务器添加额外功能以允许批量发布“减少 http 会话”

    阅读: https://medium.com/@sdrzn/networking-and-persistence-with-json-in-swift-4-c400ecab402d https://medium.com/@sdrzn/networking-and-persistence-with-json-in-swift-4-part-2-e4f35a606141

    • 建议: 看起来你已经开始使用 Swift/IOS 了,所以只需使用像 Alamofire 这样的 http 库就可以避免像队列、线程、编译块这样的所有头痛。

    https://github.com/Alamofire/Alamofire

    【讨论】:

    • 使用异步请求,要找出该任务何时完成,是否会使用进度条。然后如果没有启用进度条,那么发送第二个POST 请求的数据?
    • 不要使用进度条查看状态。只是用它来通知用户发生了什么事。我想建议您在服务器端构建批量功能,以便您可以在单个请求上发送多个帖子
    • 我该如何实施build bulk features?这听起来很适合我想做的事情。
    • 您需要在服务器端构建新功能。新方法必须接受 json 对象。您可以将多个元素传递给您的服务器以在单个请求中进行处理。检查developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/… 如果您能够分享您的 API 代码/结构 .. 等,我可以提供帮助
    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多