我使用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/