【发布时间】:2017-08-29 06:32:27
【问题描述】:
我使用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种方法获取数据,但只有method 2可以获取数据:
方法一:
让 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())
}
}
}
方法二:
让 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无法获取数据?如何解决?谢谢。 任何一点表示赞赏。
【问题讨论】:
标签: ios json swift parameters alamofire