将数据发布到PHP并使用SwiftyJSON获取JSON

时间:2016-09-11 09:18:16

标签: ios json swift post

我正在使用Xcode和Swift开发iOS应用程序。

我使用SwiftyJSON.swift和以下代码获取JSON数据:

import UIKit

class ViewController: UIViewController {

    var dict = NSDictionary()

    @IBOutlet weak var firstLb: UILabel!
    @IBOutlet weak var secondLb: UILabel!
    var uasername = "TestUserName"

    override func viewDidLoad() {

        super.viewDidLoad()

        let urlString = "http://example.com/showUserInfo.php"

        if let url = NSURL(string: urlString) {

            if let data = try? NSData(contentsOfURL: url, options: []) {

                let json = JSON(data: data)

                print(json)

                let f = json[0]["name"].stringValue

                let s = json[0]["age"].stringValue

                firstLb.text = f

                secondLb.text = s
            }
        }
    }
}

但我希望能够将一个值POST给showUserInfo.php。

我的showUserInfo.php PHP脚本如下所示:

<?php
$root = realpath($_SERVER["DOCUMENT_ROOT"]);
include "$root/config.php";

$username = $_POST['username'];

$stmt = $pdo->prepare('SELECT * FROM contact WHERE username = :username');
$stmt->execute(array('username' => $username));

$userData = array();

while($row=$stmt->fetch(PDO::FETCH_ASSOC)){
$userData[] = $row;
}
echo json_encode($userData);
?>

在我的PHP脚本中使用$username = "TestUserName";而不是$username = $_POST['username'];时,使用我的Swift代码从PHP脚本获取JSON数据非常有效。但我希望能够$_POST在我的应用程序中声明的PHP脚本的特定用户名。

是否有人知道如何在不需要导入库的情况下执行此操作?

2 个答案:

答案 0 :(得分:0)

在默认行为中,NSURL使用 GET 作为HTTP方法。您必须使用 NSMutableURLRequest 并将名为 HTTPMethod 的属性设置为POST。如果您想查看在Swift 2/3中使用帖子请求的确切示例,请访问here

答案 1 :(得分:0)

这是Alamofire和SwiftyJSON实现

let parameters = ["username": "TestUserName"]

    Alamofire.request(.POST, "http://example.com/showUserInfo.php",parameters: parameters).responseJSON { response in
        debugPrint(response.result.value)
         let json = JSON(data: response.data!)
        print(json)

        let f = json[0]["name"].stringValue

        let s = json[0]["age"].stringValue

        firstLb.text = f

        secondLb.text = s
    }