2016-04-15 104 views
3

這是我的網址字符串與參數。 http://api.room2shop.com/api/product/GetProducts?categoryId=22&filter=2&pageNumber=1通過我得到我的JSON數據。我有AFWrapper.swift文件,我已經爲GETrequest定義了函數。使用GET請求和參數與Alamofire獲取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中正確解析的響應。

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

編輯: 接受與GET服務類型參數:

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服務通過字符串操作(即在URL字符串中提供參數)或以JSON格式創建接受參數的服務有兩種方式參數,但在後一種情況下,您的URL應該是乾淨的,不需要任何參數。 (這是很好的做法)。爲了在GET服務中將參數作爲JSON來處理,我正在編輯我的答案。檢查! –

+0

耶..我解決了.. –

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

希望它可以幫到你