当您想要从 PHP 获取数据到 iOS 设备时,我建议让 PHP 代码将其作为 JSON 发送。 JSON 更容易让客户端应用程序解析(特别是当您的 Web 服务响应变得更加复杂时),并且它可以更轻松地区分有效响应和某些通用服务器错误)。
为了从 PHP 发送 JSON,我通常创建一个“关联数组”(例如,$results
下面的变量),然后调用json_encode
:
<?php
$name = "William";
$results = Array("name" => $name);
header("Content-Type: application/json");
echo json_encode($results);
?>
(a) 指定了Content-Type
标头指定响应将是application/json
; (b) 然后编码$results
.
传递到设备的 JSON 如下所示:
{"name":"William"}
然后就可以编写Swift代码来调用NSJSONSerialization
解析该响应。例如,在 Swift 3 中:
let url = URL(string: "http://example.com/test.php")!
let request = URLRequest(url: url)
// modify the request as necessary, if necessary
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data else {
print("request failed \(error)")
return
}
do {
if let json = try JSONSerialization.jsonObject(with: data) as? [String: String], let name = json["name"] {
print("name = \(name)") // if everything is good, you'll see "William"
}
} catch let parseError {
print("parsing error: \(parseError)")
let responseString = String(data: data, encoding: .utf8)
print("raw response: \(responseString)")
}
}
task.resume()
或者在 Swift 2 中:
let url = NSURL(string: "http://example.com/test.php")!
let request = NSMutableURLRequest(URL: url)
// modify the request as necessary, if necessary
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
guard let data = data else {
print("request failed \(error)")
return
}
do {
if let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String: String], let name = json["name"] {
print("name = \(name)") // if everything is good, you'll see "William"
}
} catch let parseError {
print("parsing error: \(parseError)")
let responseString = String(data: data, encoding: NSUTF8StringEncoding)
print("raw response: \(responseString)")
}
}
task.resume()