使用 SwiftyJSON 获取 JSON 时发布数据
Posted
技术标签:
【中文标题】使用 SwiftyJSON 获取 JSON 时发布数据【英文标题】:POST data while when getting JSON with SwiftyJSON 【发布时间】:2016-09-04 09:44:53 【问题描述】:我正在使用 Xcode 和 Swift 开发一个 ios 应用程序。
我正在使用SwiftyJSON.swift 和以下代码获取 JSON 数据:
import UIKit
class ViewController: UIViewController
var dict = NSDictionary()
@IBOutlet weak var firstLb: UILabel!
@IBOutlet weak var secondLb: UILabel!
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
这很好,但我希望能够发布到我的 PHP 脚本。 (我的 PHP 脚本已经准备好了。它可以接收 POST 数据并进行处理。)
我通常使用以下代码将数据 POST 到 PHP:
let request = NSMutableURLRequest(URL: NSURL(string: "http://example.com/showUserInfo.php")!)
request.HTTPMethod = "POST"
let postString = "username=MyUserName"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
这意味着:我知道如何使用 JSON 获取数据,并且我知道如何将值发布到 PHP。但不幸的是,我无法将两者结合起来。
有人知道如何组合它们吗?如何将值发布到获取 JSON 数据的 PHP 脚本?
【问题讨论】:
您可以发布您的 PHP 代码以获得更多帮助。 为什么? PHP 代码包含$username = $_POST['username'];
。如何将我的 Swift 代码中的值发布到我的 PHP 脚本?
大卫,你错了。向我们展示您对如何发布数据的尝试。解释一下,什么不起作用,我们会帮助你。这不是一个可以“我有危险代码”的网站。
@vikingosegundo 我更新了我的问题。你能帮帮我吗?
使用NS(Mutable)URLRequest
,您走在了正确的道路上,但不要使用postString
。您最好使用let params = ["username":"MyUserName"], request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params options:0)
或类似的东西(它可能无法编译,我不会说 Swift),或者使用 SwiftyJSON(因为您使用它)等效方法将 Dictionary 转换为 JSON Data。
【参考方案1】:
要将数据发布到服务器,您应该使用内置 API,或者您可以使用一个非常著名的库:Alamofire
示例代码:
let params:[String:AnyObject] = [
"foo" : 1,
"bar" : 2
]
request(.POST, "URL", parameters: params)
.responseJSON response in
switch response.result
case .Success(let JSON):
print("JSON: \(JSON)")
case .Failure(let error):
print("Request failed with error: \(error)")
【讨论】:
我更喜欢非库解决方案。你认识一个吗? @David Alamofire 几乎是行业标准......为什么要重新发明***? @Sajjon 我更喜欢自定义解决方案,我不想使用 CocoaPod。或者有没有办法在没有 CocoaPod 的情况下安装 Alamofire? 然后就可以使用NSURLSession了。但是,单个开发人员自己编写 HTTPClient 的可能性比整个开源社区编写的更好……这就是我强烈推荐 Alamofire 的原因。 是的,您可以在没有 cocoapods 的情况下安装 Alamofire,只需拖放 Alamofire 项目的“Source”文件夹即可。复制文件夹时不要忘记设置目标和复制项目。以上是关于使用 SwiftyJSON 获取 JSON 时发布数据的主要内容,如果未能解决你的问题,请参考以下文章
将数据发布到 PHP 并使用 SwiftyJSON 获取 JSON
使用 Alamofire + SwiftyJSON 获取 JSON 数组
SwiftyJSON - 无法从 JSON 字符串获取 transactionId