私はIOS開発に不慣れで、Swift言語から始めました。
2つのテキストフィールドから値を取得し、それらの2つのテキストフィールドをjsonに変換して、そのjsonをサーバーのreceive.phpに送信しようとしています。
2つのテキストフィールドが--name--passであることを考えてみましょう
jsonを作成し、ボタンがクリックされたときにサーバーに送信するにはどうすればよいですか?
NSURLSessionでhttp POSTメソッドを使用します。ログインボタンを押してsubmitActionメソッドを呼び出しているとします。
Swift
@IBAction func submitAction(_ sender: UIButton) {
//declare parameter as a dictionary which contains string as key and value combination. considering inputs are valid
let parameters: [String: String] = ["name": nametextField.text, "password": passwordTextField.text]
//create the url with URL
let url = URL(string: "http://myServerName.com/api")! //change the url
//create the session object
let session = URLSession.shared
//now create the URLRequest object using the url object
var request = URLRequest(url: url)
request.httpMethod = "POST" //set http method as POST
do {
request.httpBody = try JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) // pass dictionary to nsdata object and set it as request body
} catch let error {
print(error.localizedDescription)
}
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
//create dataTask using the session object to send data to the server
let task = session.dataTask(with: request, completionHandler: { data, response, error in
guard error == nil else {
return
}
guard let data = data else {
return
}
do {
//create json object from data
if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {
print(json)
// handle json...
}
} catch let error {
print(error.localizedDescription)
}
})
task.resume()
}
Swift 3、Swift 4上記の方法は非常に非効率的で、代わりにalamofireを使用してください
https://github.com/Alamofire/Alamofire
テキストフィールドからメールとパスワードを取得する
@IBAction func submitAction(sender: AnyObject) {
let email= emailfield.text
let password= emailfield.text
let parameters: Parameters = [
"email": email,
"password": password
]
Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters) }
またはここに例があります
let parameters: Parameters = [
"foo": "bar",
"baz": ["a", 1],
"qux": [
"x": 1,
"y": 2,
"z": 3
]
]
// All three of these calls are equivalent
Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters)
Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters, encoding: URLEncoding.default)
Alamofire.request("https://httpbin.org/post", method: .post, parameters: parameters, encoding: URLEncoding.httpBody)
// HTTP body: foo=bar&baz[]=a&baz[]=1&qux[x]=1&qux[y]=2&qux[z]=3