【发布时间】:2018-07-21 21:05:45
【问题描述】:
func DoLogin(_ email:String, _ password:String)
{
struct user : Decodable {
let userid: Int
let sfname: String
let slname: String
let email: String
let sid: Int
}
let url = URL(string: ".....")!
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.httpMethod = "POST"
let postString = "email=" + email + "&password=" + password + ""
request.httpBody = postString.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
guard let data = data, error == nil else { // check for fundamental networking error
print(error!)
return
}
if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors
print("statusCode should be 200, but is \(httpStatus.statusCode)")
print(response!)
}
let responseString = String(data: data, encoding: .utf8)
print(responseString!)
do {
let myStruct = try JSONDecoder().decode(user.self, from: data)
print(myStruct)
} catch let error as NSError {
print(error)
}
}
task.resume()
}
所以目标是将 JSON 响应保存到“用户”类中,这样我就可以使用变量将数据插入到 sql 数据库中。我目前遇到的问题是错误消息...
"Error Domain=NSCocoaErrorDomain Code=4865"没有与 key userid ("userid") 关联的值。" UserInfo={NSCodingPath=( ), NSDebugDescription=没有与关键用户 ID ("userid") 关联的值。}"
我觉得问题在于 HTTP 响应以数组形式返回数据,然后无法解码(下面列出的 HTTP 响应是我一直用于测试目的的 responseString)
{"user":{"userid":2,"sfname":"John","slname":"Doe","email":"john@doe.com","sid":123456}}
这是用于返回数据的 PHP。
public function getUserByEmail($email)
{
$stmt = $this->conn->prepare("SELECT userid, sfname, slname, email, sid FROM students WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->bind_result($userid, $sfname, $slname, $email, $sid);
$stmt->fetch();
$user = array();
$user['userid'] = $userid;
$user['sfname'] = $sfname;
$user['slname'] = $slname;
$user['email'] = $email;
$user['sid'] = $sid;
return $user;
}
提前致谢:D
【问题讨论】: