Swift未从PHP服务器解析JSON
我正在用swift为iOS编写一个简单的应用程序,它可以对我的服务器进行ajax调用。以下是相关的swift代码:Swift未从PHP服务器解析JSON,php,ios,json,swift,Php,Ios,Json,Swift,我正在用swift为iOS编写一个简单的应用程序,它可以对我的服务器进行ajax调用。以下是相关的swift代码: class Request : NSObject { func send(url: String, f: (NSData)-> ()) { var request = NSURLRequest(URL: NSURL(string: url)!) var response: NSURLResponse? var error
class Request : NSObject {
func send(url: String, f: (NSData)-> ()) {
var request = NSURLRequest(URL: NSURL(string: url)!)
var response: NSURLResponse?
var error: NSErrorPointer = nil
var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error: error)
//var reply = NSString(data: data!, encoding: NSUTF8StringEncoding)
f(data!)
}
}
class myObj: NSObject {
let baseURL: String
var message: String
init() {
self.baseURL = XXXXXXXXXXXXX
self.message = "No Message"
}
func check() -> Bool {
let locationURL = self.baseURL
self.message = locationURL
var request = Request()
request.send(locationURL, f: {(result: NSData)-> () in
let jsonData: NSData = result
var error: NSError?
let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as! NSDictionary
self.message = jsonDict["title"] as! String
})
return true
}
}
以下是我返回伪JSON的服务器端代码:
<?php
header('Content-Type: application/json; charset=utf-8');
if(isset($_GET['location'])) {
echo json_encode(Array( 'success' => true, 'message' => 'I came from the server.', 'title' => 'tittttt'));
} else if(isset($_POST['message'])) {
echo json_encode(Array( 'success' => true, 'message' => 'message received', 'title' => 'ttt'));
} else {
echo json_encode(Array( 'success' => false, 'message' => 'invalid params', 'title' => 'title from server'));
}
?>
当我将我的URL切换为一个伪json URL(我正在使用)时,它会工作;当我使用自己的URL时,它会失败,并出现以下错误:
致命错误:在展开可选值时意外发现nil
我做错了什么
编辑:以下是来自服务器的实际JSON响应:
{
成功:没错,
信息:“我来自服务器。”,
标题:“title”}
你试过添加吗
标题(“访问控制允许原点:”代码>
到您的PHP在哪一行发生错误?在这一行:让jsonDict=NSJSONSerialization.JSONObjectWithData(jsonData,options:nil,error:&error)为!NSDictionary
您的php似乎返回了一个数组,而您的swift似乎强迫它成为一个字典这似乎是您的php响应在某种程度上是错误的,尽管这不是由于您使用了php的数组,因为php就是这样处理字典的。Frank,你可以发布一个示例响应(如果需要,可以使用经过编辑/修改的数据)?标题(“访问控制允许来源:”;哇哦。。好吧,我只是想解释一下。。这是为了允许跨域连接。任何来自不同域的请求通常都会被阻止。这允许请求通过。