使用 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 快速传递参数的主要内容,如果未能解决你的问题,请参考以下文章

使用 afnetworking 在 GET 方法的 url 中传递参数

AFNetworking 2.0:传递标头信息

iOS开发之HTTPS连接GET请求实现Body传递参数

Java中的参数传递

什么是形参和实参?参数传递的方式都有哪些?

为什么Java只有值传递?