【发布时间】:2019-01-21 19:49:48
【问题描述】:
使用 Swift 4 从 PHP 输出页面加载 JSON 时出现错误。
注意:PHP 脚本已经过检查并且工作正常
let myUrl = URL(string: "http://localhost/swift/signin_up/login.php");
var request = URLRequest(url:myUrl!)
request.httpMethod = "POST"// Compose a query string
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
DispatchQueue.main.async {
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
if error != nil {
print("error=\(error!)")
return
}
// You can print out response object
print("response = \(response!)")
print("==================================")
//Let's convert response sent from a server side script to a NSDictionary object:
do {
let json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
if let parseJSON = json {
print(parseJSON)
}
} catch {
print(" error:\(error)")
}
}
task.resume()
我从 Xcode 收到此错误消息:
错误:错误域 = NSCocoaErrorDomain 代码 = 3840“JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。” UserInfo={NSDebugDescription=JSON 文本没有以数组或对象开头,并且允许未设置片段的选项。}
当我将选项更改为:
options: [.mutableContainers, .allowFragments]
我收到此错误消息:
错误:错误域 = NSCocoaErrorDomain 代码 = 3840“垃圾结束。” UserInfo={NSDebugDescription=垃圾结束。}
这是我测试的 PHP 输出:
{"id":"1","email":"aa","password":"aa"}
【问题讨论】:
-
当你遇到一些错误时,请至少包含错误信息。
-
您可以编辑自己的问题。
-
我猜你的php服务器返回了某种错误,如果你把
print(String(data: data!, encoding: .utf8))放在let json = ...之前会得到什么? -
我用上面的代码替换并得到消息错误{error:Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=字符 0 周围的值无效。} @OOPer
-
print(String(data: data!, encoding: .utf8))永远不会输出这样的消息,我也从未建议过任何形式的替换。你在看我的评论吗?