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

Posted

技术标签:

【中文标题】将数据发布到 PHP 并使用 SwiftyJSON 获取 JSON【英文标题】:POST data to PHP and getting JSON with SwiftyJSON 【发布时间】:2016-09-11 09:18:15 【问题描述】:

我正在使用 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
            
        
    

但我也希望能够向 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 脚本的特定用户名。

有人知道如何在不需要导入库的情况下做到这一点吗?

【问题讨论】:

【参考方案1】:

这里是 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
    

【讨论】:

【参考方案2】:

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

【讨论】:

嗨@Sebastian K,非常感谢您尝试帮助我。感谢您的链接。我知道这种 POST 值的方法。但我无法将get-JSON-codePOST-value-code 这两个代码结合起来。你知道吗?你能告诉我怎么做吗? 我看到您使用的库 can 与 Alamofire 一起使用。我知道,您要求的东西不会使用外部库,但在这种情况下,这将是您适应的最简单方法。 抱歉我的回复晚了。我会尝试导入 Alamofire。但是我必须如何修改我的实际代码才能达到我的目标?

以上是关于将数据发布到 PHP 并使用 SwiftyJSON 获取 JSON的主要内容,如果未能解决你的问题,请参考以下文章

使用 swiftyJSON 和 sqlite.swift 将基于 json 的数据添加到 sqlite 数据库中

如何使用 SwiftyJSON 在 Swift 中解析这个 JSON 对象?

将 JSON 响应保存为变量以使用 SwiftyJSON 反序列化

如何使用 Alamofire 和 SwiftyJSON 将数据发送到表视图

将 SwiftyJSON 中的元素添加到 Swift 中的 URL 数组

SwiftyJSON 并添加到现有的 [String: AnyObject] 字典