Swift 2,解析 JSON,空响应
Posted
技术标签:
【中文标题】Swift 2,解析 JSON,空响应【英文标题】:Swift 2, Parsing JSON, empty response 【发布时间】:2016-03-10 04:09:13 【问题描述】:我最近使用 php 和 AJAX 制作了一个基于 Web 的单屏应用程序。我想将这个应用程序移植到 ios,并开始自学 Swift。我让应用程序在 Swift 1 中完美运行,但由于我更新到 xCode 7.2 和 Swift 2,以便我可以在装有 iOS 9 的 iPhone 上试用该应用程序,因此代码完全不起作用。从这里开始,我现在有了新代码,据我所知,它应该可以工作,但我得到的响应是空的。怎么了?
import UIKit
import Foundation
class LoginViewController: UIViewController, UITextFieldDelegate
@IBOutlet weak var username_textField: UITextField!
@IBOutlet weak var password_TextFieldOutlet: UITextField!
@IBAction func password_TextFieldAction(sender: AnyObject)
let username = username_textField.text
let password = password_TextFieldOutlet.text
var urlRequest = "~~URL~~/login.php?username=\(username)&password=\(password)"
override func viewDidLoad()
super.viewDidLoad()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
我的想法是从数据库中获取我的数据并查看“成功”(数据库中的布尔值)是否返回 1 或 0。如果返回 1,则执行转到下一页,如果不是,创建一个提示用户名和密码不正确的警报。
提前谢谢你!
【问题讨论】:
但是你的代码没有这样做!!它只是初始化变量。 @CnchalRaj 我明白,我找不到解决方案来让它工作 - 我是说我不明白如何从 URL 中检索 json 数据 你的password_TextFieldAction
是什么?是单击按钮还是在 textField 上进行修饰 ==
给你:***.com/questions/24016142/…
@Lee 这是文本字段在退出时结束时的操作
【参考方案1】:
创建网址
let url = NSURL(string: "http://google.com")
创建请求
let request = NSMutableUrlRequest(url: url!)
添加数据和请求方法
request.HTTPMethod = "POST"
request.HTTPBody = "username=\(username text.text!)".dataUsingEncoding(NSUTF8StringEncoding)
发送连接
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue())
(response, data, error) -> Void in
if data != nil && error == nil
if let response = String(data: data!, encoding: NSUTF8StringEncoding)
//here is where you now have your response
)
【讨论】:
建议使用 NSURLSession 而不是 NSURLConnection。 @ryantxr 虽然从 php 文件发送的编码是 JSON【参考方案2】:对网络请求使用 NSURLConnectionDelegate
或 AFNetworking
。以下是使用NSURLConnection
的实现。
我已经为你实现了LoginViewController
类。
将以下 loginButtonAction
挂钩到 UI 上的“登录/登录/完成”按钮。
import UIKit
import Foundation
class LoginViewController: UIViewController, NSURLConnectionDelegate
@IBOutlet weak var username_textField: UITextField!
@IBOutlet weak var password_TextFieldOutlet: UITextField!
@lazy var data = NSMutableData()
override func viewDidLoad()
super.viewDidLoad()
override func viewWillAppear(animated: Bool)
super.viewWillAppear(animated)
startConnection()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
func startConnection()
let username = username_textField.text
let password = password_TextFieldOutlet.text
let urlPath: String = "~~URL~~/login.php?username=\(username)&password=\(password)"
var url: NSURL = NSURL(string: urlPath)
var request: NSURLRequest = NSURLRequest(URL: url)
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)
connection.start()
func connection(connection: NSURLConnection!, didReceiveData data: NSData!)
self.data.appendData(data)
func loginButtonAction(sender: UIButton!)
startConnection()
func connectionDidFinishLoading(connection: NSURLConnection!)
var err: NSError
var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
//Here I am printing the results, you can check the results and based on response Bool you can perform segue to next view controller.
println(jsonResult)
【讨论】:
您可以将您的代码发送到 rajchanchalkhatri@gmail.com 吗?让我为你修好它。以上是关于Swift 2,解析 JSON,空响应的主要内容,如果未能解决你的问题,请参考以下文章
使用 Codable 解析 JSON 响应会在 swift 中出现错误