ios - Alamofire 获取带参数数据的问题

标签 ios json swift parameters alamofire

我使用Alamofire从服务器获取数据,但是使用parameters方法获取不到任何数据,而它可以获取完整的url(包括url中的2个参数) ). url格式:http://mobilecdnbj.kugou.com/new/app/i/search.php?cmd=302&keyword=%E5%88%98%E5%BE%B7%E5%8D%8E。 2个参数,一个是cmd = 302,另一个是keyword,需要用户输入。

我使用了以下2种方法获取数据,但只有方法2可以获取数据:

方法一:

let Search_Recommendation = "http://mobilecdnbj.kugou.com/new/app/i/search.php"

func getSearchRecommendation(keyword:String,success succeed:@escaping([String]) -> Void,failure fail:@escaping ((NSError)) -> Void){

        var recommendations = [String]()
        let parameters = ["cmd":302,"keyword":keyword] as [String : Any]
        let headers = ["Content-Type":"Application/json"]

        Alamofire.request(Search_Recommendation, method: HTTPMethod.get, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON { (response) in

            /** the following code is the same in the 2 methods*/

            if let json = response.result.value as? JSON{
                if let data = json["data"] as? [JSON]{
                    recommendations = data.map({
                        return (SearchRecommend.init(json: $0).keyword)!
                    })

                }
                succeed (recommendations)
            }else{
                fail(NSError())
            }

        }


    }

方法二:

let Search_Recommendation = "http://mobilecdnbj.kugou.com/new/app/i/search.php?cmd=302&keyword="

 func getSearchRecommendation(keyword:String,success succeed:@escaping([String]) -> Void,failure fail:@escaping ((NSError)) -> Void){
    var recommendations = [String]()

    let url :String = Search_Recommendation + keyword.URLEncode()!

    Alamofire.request(url).responseJSON(completionHandler: { (response) in

            if let json = response.result.value as? JSON{
                if let data = json["data"] as? [JSON]{
                    recommendations = data.map({
                        return (SearchRecommend.init(json: $0).keyword)!
                    })

                }
                succeed (recommendations)
            }else{
                fail(NSError())
            }

        })

 }

URLEncode 方法:

  func URLEncode() -> String? {
            //self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
            return self.addingPercentEncoding(withAllowedCharacters: NSCharacterSet(charactersIn: "!*'\"();:@&=+$,/?%#[]% ").inverted)
        }

请问为什么方法一取不到数据?如何解决?谢谢。 任何一点表示赞赏。

最佳答案

看起来您使用了错误的编码。为了将附加参数附加到 URL,假设使用 URLEncoding.default

替换这个:

Alamofire.request(Search_Recommendation, method: HTTPMethod.get, parameters: parameters, encoding: JSONEncoding.default, headers: headers).responseJSON

有了这个:

Alamofire.request(Search_Recommendation, method: HTTPMethod.get, parameters: parameters, encoding: URLEncoding.default, headers: headers).responseJSON

JSONEncoding 实际上将参数附加到 body 而不是 url。因此,您的服务器无法处理它。使用以上内容,您将不再需要方法二。

example and documentation Alamofire 非常清楚,也许您想阅读更多有关差异的信息。

关于ios - Alamofire 获取带参数数据的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45932213/

相关文章:

ios - iPad 纵向和横向自动布局

javascript - 具有多个 key 对的 JSON 的适当数据结构

java - Jackson 序列化枚举和非传统 setter / getter

swift - 是否可以将输入的文本保存到 SwiftUI 的警报文本字段中,并像这样在应用程序中显示它 -> Text ("alert text input here")?

iphone - 我如何运行多个 ios 模拟器来测试 p2p

android - 页面问题内的Phonegap垂直滚动

ios - 在ios中设置自定义UI的大小

javascript - http请求获取正文

swift - 如何在 UIButton 背景中设置两种颜色

ios - 在 Swift 中为 UI 通知创建方法