2017-08-09 67 views
1

POST方法這是什麼一個例子,我想這樣做,但行if let json = try JSONSerialization.jsonObject(with: data) as? [String: String]false因爲JSONSerialization.jsonObject回報是nil響應是零,在迅速3

func parser(lbl: UILabel){ 
    let postString = "xxx=xxx&xxxx=xxxx==&xxxxx=xxxxx&xxxxxx=xxxxxx&xx=xx" 

    let url = URL(string: "http://xxxxxxxxxx.com/xxxxxx/xxxxx/xxxxxx.php")! 
    var request = URLRequest(url: url) 

    request.httpMethod = "POST" 
    request.httpBody = postString.data(using: .utf8) 

    let task = URLSession.shared.dataTask(with: request) { data, response, error in 
     guard let data = data else { 
      lbl.text = "error"; 

      return 
     } 

     do { 
      if let json = try JSONSerialization.jsonObject(with: data) as? [String: String] { 
       DispatchQueue.main.async { 

        let error = Int(json["success"]!) 

        let message = json["message"] 
        lbl.text = message 
       } 
      } 
     } catch let parseError { 
      print("error to parse: \(parseError)") 

      let responseString = String(data: data, encoding: .utf8) 
      print("response`enter code here` : \(responseString!)") 
     } 
    } 
    task.resume() 
} 
+0

沒有看到你的'JSON'響應中沒有人能告訴你什麼是錯的解析方法。 –

回答

3

試試這個:

var resultFromServer: Any? 
resultFromServer = try JSONSerialization.jsonObject(with: data!, options: []) 

這應該給你resultFromServer類型的Any?,只需檢查和類型轉換取決於R的基礎上,你得到一個數組或字典。

if let respdict = resultFromServer as? [String : Any] { 
//respone in dictionary format 
} 

else if let respArr = resultFromServer as? [Any]{ 
//response is array type 
} 

else if let stringRespt = String(data: data, encoding: .utf8){ 
//resp is string         
} 

只是要改變按您的JSON

+1

不要使用'.mutableContainers',因爲它在'Swift'中沒有效果。整個JSON對象的可變性取決於您是使用'let'還是'var'關鍵字來聲明它。 –

+0

謝謝!你的代碼幫助了我很多,但現在我又犯了一個錯誤! 方法POST發送像「」我的意思是空的網絡服務參數 –

+0

您能否提供一個建議來取代.mutableContainers? –