2016-04-15 33 views
3

これはパラメータを使用した私のURL文字列です。 http://api.room2shop.com/api/product/GetProducts?categoryId=22&filter=2&pageNumber=1 JSONデータを取得しています。私はGETrequestのための関数を定義したAFWrapper.swiftファイルを持っています。AlamofireでGETリクエストとパラメータを使用してJSON結果を取得する

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

しかし、私には何の反応も与えず、私にこのエラーを与えていません。

FAILURE:エラードメイン= 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 {エラードメイン= kCFErrorDomainCFNetworkコード= -1017 "(ヌル)" の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 {エラードメイン= kCFErrorDomainCFNetworkコード= -1017 "(ヌル)" のUserInfo = {_ kCFStreamErrorDomainKey = 4、_kCFStreamErrorCodeKey = -1}}}

私は間違っていると誰に教えてもらえますか?私はこのリンクを見張ったが、何が間違っているかは分からなかった。 URL Encode Alamofire GET params with SwiftyJSON

答えて

9

私はあなたが "エンコーディング: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) 
     } 


} 
0

このコードを使用してください。 JSONで正しく解析されたレスポンスを取得しています。 GET型サービスでパラメータを受け入れるための :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使用

この場合

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) 
    .responseData { response in 
     print(response.request) 
     print(response.response) 
     print(response.result) 
     } 

があなたのURL文字列を操作しないようにしようとすると、このような辞書の面ですべてのパラメータを送信します。

+0

私は直接URLが正しく応答していることを知っています。しかし、私はパラメータ@ n.byを渡したいと思います。n –

+0

Webサービスでは、String操作(つまり、URL String内のパラメータを与える)またはパラメータをJSON形式で受け入れるサービスを作成する2つの方法がありますが、後者の場合、URLはパラメータなしでクリーンにする必要があります。 (これは良い方法です)。 GETサービス内でJSONとしてパラメータを取得するために、私は自分の答えを編集しています。チェック! –

+0

Yah ..私はそれを解決しました.. –

1

あなた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を宣言する必要はありません。

希望します。

関連する問題