2016-10-25 22 views
0

我想要在swift中连接一个应用程序2.1 我有一个按钮登录,我做了一个函数loginButton。 我想恢复我的网址:localhost/connexion/login/password 并且我想说如果用户在数据库中就没关系! 但我并不真正理解迅速,我是这个语言的初学者。 所以有我的代码:登录连接,方法使用API​​获取swift使用API​​

@IBAction func loginButton(sender: AnyObject) { 
     NSLog("login ok") 
     let _login = loginText.text 
     let _password = passwordText.text 

     if(_login!.isEmpty || _password!.isEmpty){ 
      var alert:UIAlertView = UIAlertView() 
      alert.title = "Error" 
      alert.message = "Entrez vos identifiants" 
      alert.delegate = self 
      alert.addButtonWithTitle("OK") 
      alert.show() 
     } else{ 
      let request = NSMutableURLRequest(URL: NSURL(string: "http://localhost:8888/connexion/"+_login!+"/"+_password!)!) 
      request.HTTPMethod = "GET" 
      let postString = "login=\(_login!)&pass=\(_password)" 
      let session = NSURLSession.sharedSession() 
      let task = session.dataTaskWithRequest(request) 
      task.resume(); 
     } 
    } 

我以前How to make an HTTP request in Swift? 遵循这一点,但它不工作。 我尝试了很多东西,但没有真正理解发生了什么,我没有找到一个很好的解释很好的教程。如果有人能解释我该怎么做,我会非常高兴!

回答

0

我想将数据发送到服务器,你应该建立一个“POST”请求,并使用NSURLSession API发送数据

@IBAction func loginButton(sender: AnyObject) { 
     NSLog("login ok") 
     let _login = loginText.text 
     let _password = passwordText.text 

     if(_login.isEmpty || _password.isEmpty){ 
      var alert:UIAlertView = UIAlertView() 
      alert.title = "Error" 
      alert.message = "Entrez vos identifiants" 
      alert.delegate = self 
      alert.addButtonWithTitle("OK") 
      alert.show() 
     } else{ 
      let request = NSMutableURLRequest(URL: NSURL(string: "http://localhost:8888/connexion/login")!) 
     request.HTTPMethod = "POST" 
     let params = ["login": _login, "pass": _password] 
     do { 
      let data = try NSJSONSerialization.dataWithJSONObject(params, options: .PrettyPrinted) 
      request.HTTPBody = data 
     } catch let error as NSError { 
      print("json error: \(error.localizedDescription)") 
     } 

     let loginTask = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) in 
      guard let data = data, let _ = response where error == nil else { 
       print("error") 
       return 
      } 

      do { 
       let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) 
       print(json) 
      } catch let error as NSError { 
       print("json error: \(error.localizedDescription)") 
      } 
     }) 
     loginTask.resume() 
     } 
    } 

使用“GET”替换其他部分与

let url = "http://localhost:8888/connexion/login=\(_login)&pass=\(_password)" 
    let urlString = url.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 
    let request = NSURLRequest(URL: NSURL(string: urlString)!) 

    let loginTask = NSURLSession.sharedSession().dataTaskWithRequest(request, completionHandler: { (data, response, error) in 

     guard let data = data, let _ = response where error == nil else { 
      print("error") 
      return 
     } 

     /*do { 
      let json = try NSJSONSerialization.JSONObjectWithData(data, options: .AllowFragments) 
      print(json) 
     } catch let error as NSError { 
      print("json error: \(error.localizedDescription)") 
     }*/ 
    if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {   // check for http errors 
     print("statusCode should be 200, but is \(httpStatus.statusCode)") 
     print("response = \(response)") 
    } 

    let responseString = String(data: data!, encoding:NSUTF8StringEncoding) 
    print("responseString = \(responseString)") 
    }) 
    loginTask.resume() 
+0

我更换由你的其他人,但我已经试过这个,我有这个错误: –

+0

json错误:数据无法读取,因为它不是在正确的格式。 –

+0

我认为您对登录请求的响应不是以json格式发送,请检查此链接http://stackoverflow.com/questions/37825284/the-data-couldn-t-be-read-because-it-isnt在这正确的格式 – suhit