これは、パラメータを含む私のURL文字列です。 http://api.room2shop.com/api/product/GetProducts?categoryId=22&filter=2&pageNumber=1 これを介してJSONデータを取得しています。 GETrequestの関数を定義したAFWrapper.Swiftファイルがあります。
import UIKit
import Alamofire
import SwiftyJSON
class AFWrapper: NSObject {
class func requestGETURL(strURL: String, params : [String : AnyObject]?, success:(JSON) -> Void, failure:(NSError) -> Void) {
Alamofire.request(.GET, strURL, parameters: params, encoding: ParameterEncoding.JSON).responseJSON { (responseObject) -> Void in
print(responseObject)
if responseObject.result.isSuccess {
let resJson = JSON(responseObject.result.value!)
success(resJson)
}
if responseObject.result.isFailure {
let error : NSError = responseObject.result.error!
failure(error)
}
}
}
}
現在、ViewController.Swiftファイルでこの関数を呼び出しています。
let strURL = "http://api.room2shop.com/api/product/GetProducts"
let param = ["categoryId": "22", "filter": "2", "pageNumber": "1"]
AFWrapper.requestGETURL(strURL, params: param, success: {
(JSONResponse) -> Void in
if let resData = JSONResponse["ProductList"].arrayObject {
for item in resData {
self.TableData.append(datastruct(add: item as! NSDictionary))
}
do
{
try self.read()
}
catch
{
}
self.do_table_refresh()
}
}) {
(error) -> Void in
print(error)
}
しかし、それは私に何の応答も与えず、私にこのエラーを与えません。
失敗:エラードメイン= NSURLErrorDomainコード= -1017 "応答を解析できません" UserInfo = {NSErrorFailingURLStringKey = http://api.room2shop.com/api/product/GetProducts 、_ kCFStreamErrorCodeKey = -1、NSErrorFailingURLKey = http://api.room2shop.com/api/product/GetProducts 、NSLocalizedDescription =応答を解析できません、_kCFStreamErrorDomainKey = 4、NSUnderlyingError = 0x78ecf180 {Error Domain = kCFErrorDomainCFNetwork Code = -1017 "(null)" UserInfo = {_ kCFStreamErrorDomainKey = 4、_kCFStreamErrorCodeKey = -1}}}エラードメイン= NSURLErrorDomainコード= -1017「応答を解析できません」UserInfo = {NSErrorFailingURLStringKey = http://api.room2shop.com/api/product/ GetProducts 、_ kCFStreamErrorCodeKey = -1、NSErrorFailingURLKey = http://api.room2shop.com/api/product/GetProducts 、NSLocalizedDescription =応答を解析できません、_kCFStreamErrorDomainKey = 4、NSUnderlyingError = 0x78ecf180 {エラーDomain = kCFErrorDomainCFNetwork Code = -1017 "(null)" UserInfo = {_ kCFStreamErrorDomainKey = 4、_kCFStreamErrorCodeKey = -1}}}
誰かが私が間違っていることを教えてもらえますか?私はこのリンクを検索しましたが、何が問題なのかわかりません。 RLエンコードAlamofire GET params with SwiftyJSON
次のように、「encoding:ParameterEncoding.JSON」のパラメーターを削除する必要があると思います。
Alamofire.request(.GET, strURL, parameters: params).responseJSON { (responseObject) -> Void in
print(responseObject)
if responseObject.result.isSuccess {
let resJson = JSON(responseObject.result.value!)
success(resJson)
}
if responseObject.result.isFailure {
let error : NSError = responseObject.result.error!
failure(error)
}
}
このコードを使用してください。 JSONで正しく解析された応答を取得しています。
使用Alamofire v3.0 +
Alamofire.request(.GET, "http://api.room2shop.com/api/product/GetProducts?categoryId=22&filter=2&pageNumber=1")
.responseJSON { response in
debugPrint(response)
switch response.result {
case .Success(let JSON):
print(JSON)
case .Failure(let error):
print(error)
}
}
EDIT: GETタイプサービスでパラメータを受け入れる場合:
Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
.responseData { response in
print(response.request)
print(response.response)
print(response.result)
}
この場合、URL文字列を操作せず、このように辞書の観点からすべてのパラメータを送信するようにしてください。
あなたのrequestGETURL
はそのように見えるはずです
func requestGETURL(strURL: String, params: [String:String]?, success: (AnyObject?) -> Void, failure: (NSError) -> Void) {
Alamofire.request(.GET, strURL, parameters: params).responseJSON {
(responseObject) -> Void in
print(responseObject)
if responseObject.result.isSuccess {
let resJson = JSON(responseObject.result.value!)
success(resJson)
}
if responseObject.result.isFailure {
let error: NSError = responseObject.result.error!
failure(error)
}
}
}
あなたの問題はparams
にありました[String:String]
辞書。また、エンコーディングを宣言する必要はありませんencoding:ParameterEncoding.JSON
。
お役に立てば幸いです