使用 AFNetworking 快速传递参数
Posted
技术标签:
【中文标题】使用 AFNetworking 快速传递参数【英文标题】:Passing Parameters Using AFNetworking in swift 【发布时间】:2016-05-17 09:55:48 【问题描述】:我做了什么:-
1.我想使用AFHTTPSessionManager
调用服务2.我想通过POST方法只传递JSON格式的参数 我也尝试将参数作为 JSON 传递,但我收到 Bad Request
3.使用AFNetworking 3.0
-
引用链接Convert Dictionary to JSON in Swift
我的密码:-
dict = ["email_id":user! , "password": pass!]
do
jsonData = try NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions.PrettyPrinted)
// here "jsonData" is the dictionary encoded in JSON data
theJSONText = String(data: jsonData!,
encoding: NSASCIIStringEncoding)
print("json string = \(theJSONText)")
catch let error as NSError
print(error)
manager.POST(urlString, parameters: theJSONText as String!, success:
requestOperation, response in
let result = NSString(data: response as! NSData, encoding: NSUTF8StringEncoding)!
print(result)
,
failure:
requestOperation, error in
//let result = NSString(data: error as! NSData, encoding: NSUTF8StringEncoding)!
print(error)
)
我想做什么:- 我想将参数作为 JSON 格式传递
Printing description of theJSONText:
"\n \"email_id\" : \"bbh\",\n \"password\" : \"vh\"\n"
在转换为 JSON STRING 后,我也没有进入 JSON 格式
请帮我做这件事..
【问题讨论】:
你为什么要这么复杂,你可以直接把dict传给param 我想像 JSON 格式一样发送 dict 也以 JSON 格式传递 我已经按照你说的尝试过,但它也不起作用 你能更新一次问题吗 【参考方案1】:从代码中删除以下行,
theJSONText = String(data: jsonData!,
encoding: NSASCIIStringEncoding)
print("json string = \(theJSONText)")
在 json 序列化中将选项设置为 0
而不是 NSJSONWritingOptions.PrettyPrinted
并传递jsonData
(作为数据)作为参数而不是theJSONText
。
更新:
这样试试,
let urlString = "http://example.com/file.php"
let dictionary = ["key1": [1,2,3], "key2": [2,4,6]]
var error: NSError?
let data = NSJSONSerialization.dataWithJSONObject(dictionary, options: NSJSONWritingOptions.allZeros, error: &error)
let jsonString = NSString(data: data!, encoding: NSUTF8StringEncoding)
let parameters = ["data" : jsonString!]
let manager = AFHTTPSessionManager()
manager.responseSerializer = AFHTTPResponseSerializer()
manager.POST(urlString, parameters: parameters, success:
requestOperation, response in
let result = NSString(data: response as! NSData, encoding: NSUTF8StringEncoding)!
println(result)
,
failure:
requestOperation, error in
)
在此示例中,响应为字符串,如果响应为 json 格式,则应使用 nsjsonserialization
而非字符串将其序列化为 json
希望这会有所帮助:)
【讨论】:
我已删除该行并添加 jsonData = try NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions(rawValue: 0)) 而不是 NSJSONWritingOptions.PrettyPrinted 现在我也遇到了同样的问题 BAD REQUEST 你应该使用postman
来检查你的网络服务,这样你就可以知道你的网络服务接受哪种格式的数据
我也签入了 Postman ......好吧,我有另一个我设置了内容类型 * manager.requestSerializer.setValue("application/json", forHTTPHeaderField: "Content-Type")* 像这样在使用 AFNetworking 3 的 AFhttpsession 管理器中,这种设置内容类型的方式是正确的还是想使用 * manager.responseSerializer.acceptableContentTypes = NSSet(objects:"application/json") as?设置以上是关于使用 AFNetworking 快速传递参数的主要内容,如果未能解决你的问题,请参考以下文章