在服务器上的表单变量中发布 json 对象
Posted
技术标签:
【中文标题】在服务器上的表单变量中发布 json 对象【英文标题】:POST json object in a form variable on a sever 【发布时间】:2016-01-03 12:42:54 【问题描述】:你好,我正在开发 ios SWIFT 2。我需要将 json 对象发送到一个变量中,以便我可以像这样访问 json 对象
$json = $_POST['json'];
$data = json_decode($json, TRUE);
$email = $data['email'];
$user_password = $data['password'];
现在数据正在像这样发布在服务器上
"email" : "email",
"password" : "password"
这是我正在使用的代码
func post()
let url:String = "http://example.com/test.php"
let request = NSMutableURLRequest(URL: NSURL(string: url)!)
let params = ["email":"email", "password":"password"] as Dictionary<String, String>
//let request = NSMutableURLRequest(URL:url)
let session = NSURLSession.sharedSession()
request.HTTPMethod = "POST"
do
let data = try NSJSONSerialization.dataWithJSONObject(params, options: .PrettyPrinted)
let dataString = NSString(data: data, encoding: NSUTF8StringEncoding)!
print("dataString is \(dataString)")
request.HTTPBody = try NSJSONSerialization.dataWithJSONObject(params, options: .PrettyPrinted)
catch
//handle error. Probably return or mark function as throws
print(error)
return
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
let task = session.dataTaskWithRequest(request, completionHandler: data, response, error -> Void in
// handle error
guard error == nil else return
print("Response: \(response)")
let strData = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Body: \(strData)")
let json: NSDictionary?
do
json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary
catch let dataError
// Did the JSONObjectWithData constructor return an error? If so, log the error to the console
print(dataError)
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Error could not parse JSON: '\(jsonStr)'")
// return or throw?
return
// The JSONObjectWithData constructor didn't return an error. But, we should still
// check and make sure that json has a value using optional binding.
if let parseJSON = json
// Okay, the parsedJSON is here, let's get the value for 'success' out of it
let success = parseJSON["success"] as? Int
print("Succes: \(success)")
else
// Woa, okay the json object was nil, something went worng. Maybe the server isn't running?
let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("Error could not parse JSON: \(jsonStr)")
)
task.resume()
我想将上面的 json 传递到一个名为 'json' 的表单变量中。
【问题讨论】:
【参考方案1】:我强烈建议使用库,例如 Alamofire 来处理这个问题。 自己做很乏味。
添加到您的 Swift 项目后,您可以非常非常优雅地发送 JSON 参数:
来自 Github 页面的示例:
let parameters = [
"foo": [1,2,3],
"bar": [
"baz": "qux"
]
]
Alamofire.request(.POST, "https://httpbin.org/post", parameters: parameters, encoding: .JSON)
然后您可以使用现有的 PHP 代码来处理您的 JSON。
编辑:
处理 JSON 也很优雅:
Alamofire.request(.POST, url, etc).responseJSON response in
print(response.request) // original URL request
print(response.response) // URL response
print(response.data) // server data
print(response.result) // result of response serialization
if let JSON = response.result.value
print("JSON: \(JSON)")
【讨论】:
以上是关于在服务器上的表单变量中发布 json 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何在 javascript 中使用表单数据上传大型 JSON 对象?
我可以使用 AJAX 'POST' 将数据发布到我服务器上的 JSON 文件吗?