2015-08-23 85 views
2

我正在为swift编写一个简单的iOS应用程序,它向我的服务器发出ajax调用。下面是相关SWIFT代码:Swift不从PHP服务器解析JSON

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')); 
    } 
?> 

当我转出我的网址为虚拟JSON URL(我使用http://jsonplaceholder.typicode.com/posts/1?a=b ) 有用;当我使用我自己的URL时,它会失败,并显示以下错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

我在做什么错在这里?

编辑:这里是来自服务器的实际JSON响应:

{ success: true, message: "I came from the server.", title: "tit-le" }

+0

在哪一行没有错误发生? – jtbandes

+0

就行了:'let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData,options:nil,error:&error)as! NSDictionary' –

+0

你的php似乎正在返回一个数组,你的swift似乎迫使它成为一本字典 – Wain

回答

2

具有u尝试添加 header("Access-Control-Allow-Origin: *"); 到PHP

+0

做到了!谢谢! –

+0

Wohooo ..好吧,只是为了解释..这是为了允许跨域连接。任何不是来自同一个域的请求通常都会被阻止。这允许请求通过。 – VBaarathi