2015-08-23 87 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