Alamofire获取参数数据的问题

时间:2017-08-29 06:32:28

标签: ios json swift parameters alamofire

我使用Alamofire从服务器获取数据,但是当我使用参数方法时我无法获取任何数据,而它可以获得完整的URL(包括url中的2个参数) 。 网址格式: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,需要用户输入。

我使用以下两种方法来获取数据,但只有method 2才能获取数据:

方法1:

  

让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())
            }

        }


    }

方法2:

  

让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)
        }

我想知道为什么方法1无法获取数据?如何解决?谢谢。 任何一点都值得赞赏。

1 个答案:

答案 0 :(得分:2)

看起来你使用了错误的编码。要将参数附加到user,请假设使用many-to-many

替换它:

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。因此,您的服务器无法处理它。使用上述方法,您将不再需要方法二。

Alamofire的example and documentation非常清楚,也许您想更多地了解差异。