php - 发布请求总是由可选文本包裹

标签 php xcode swift http-post option-type

我有一个与 Why the http post request body always wrapped by Optional text in the Swift app 非常相似的问题 但我无法将此线程中的解决方案应用到我的代码中,因为我没有 request.setValue。 有谁知道我需要做什么才能摆脱 Optional? 我的代码:

 @IBAction func LoginButtonTapped(sender: UIButton) {

    let username = UsernameTextField.text
    let password = PasswordTextField.text

    if(username!.isEmpty || password!.isEmpty) {return; }



    let request = NSMutableURLRequest (URL: NSURL(string: "http://myip/loginregister.php")!)
    request.HTTPMethod = "POST"
    let postString = "username=\(username)&password=\(password)"
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
        guard error == nil && data != nil else {
            // check for fundamental networking error
            print("error=\(error)")
            return
        }

        let data = postString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!



        do {
            if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary {
                let success = json["success"] as? Int                                  // Okay, the `json` is here, let's get the value for 'success' out of it
                print("Success: \(success)")
            } else {
                let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)    // No error thrown, but not NSDictionary
                print("Error could not parse JSON: \(jsonStr)")
            }
        } catch let parseError {
            print(parseError)                                                          // Log the error thrown by `JSONObjectWithData`
            let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
            print("Error could not parse JSON: '\(jsonStr)'")
        }
    }

    task.resume()

最佳答案

首先从 UITextField 获取文本时必须解包值,因为 UITextFieldtext 属性允许 nil

let username = UsernameTextField.text!
let password = PasswordTextField.text!

解释更多

当您打开 UITextField 的 text 时,usernamepassword 将是 not nil 变量。 比较空的代码应该是:

if(username.isEmpty || password.isEmpty) {return }

如果你不解包,当你使用这个"\(username)"时,你试图将一个nil对象转换成字符串,所以字符串结果将附加“可选”文本。

解决请求的Content-Type问题

将此行粘贴到您的代码中。我不相信你没有 setValue 方法。

request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField:"Content-Type")

关于php - 发布请求总是由可选文本包裹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35197288/

相关文章:

ios - 未找到无法识别的模块映射文件 Release-iphonesimulator/YogaKit/YogaKit.modulemap'

xcode - xcuserdata 文件夹中所有内容的 .gitignore 不会忽略 xcuserstate 文件

swift - 二元运算符 > 错误

ios - 以编程方式创建的按钮在 iPhone (Swift 3) 上弹出

ios - 由于预期为 Int 而不是 String,无法从外部 Firebase 服务器中删除 .childRemoved

php - 如何将2个不同表中的xml数据复制到mysql

PHP从文本文件登录

php - Slim 3 在中间件之间发送数据

javascript - 如何在注销操作中隐藏网站中的消息按钮?

swift - 在 Xcode UI 测试中编辑记录的元素