2016-04-15 10 views
3

Dies ist meine URL String mit Parametern. http://api.room2shop.com/api/product/GetProducts?categoryId=22&filter=2&pageNumber=1 durch die ich meine JSON-Daten bekomme. Ich habe AFWrapper.swift Datei, in der ich Funktion für GETrequest definiert habe.Erhalten JSON Ergebnis mit GET-Anfrage und Parameter mit Alamofire

Jetzt rufe ich diese Funktion in meiner ViewController.swift Datei auf.

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

aber es gibt mir keine Antwort und gibt mir diesen Fehler.

FEHLER: Fehler Domain = NSURLErrorDomain-Code = -1017 "kann nicht analysieren Antwort" Userinfo = {NSErrorFailingURLStringKey = http://api.room2shop.com/api/product/GetProducts, _kCFStreamErrorCodeKey = -1, NSErrorFailingURLKey = http://api.room2shop.com/api/product/GetProducts, NSLocalizedDescription = nicht Antwort analysieren, _kCFStreamErrorDomainKey = 4, NSUnderlyingError = 0x78ecf180 {Fehler Domain = kCFErrorDomainCFNetwork-Code = -1017 "(null)" Userinfo = {_ kCFStreamErrorDomainKey = 4, _kCFStreamErrorCodeKey = -1}}} Fehler Domain = NSURLErrorDomain-Code = -1017 "kann Antwort nicht analysieren" Userinfo = {NSErrorFailingURLStringKey = http://api.room2shop.com/api/product/GetProducts, _kCFStreamErrorCodeKey = -1, NSErrorFailingURLKey = http://api.room2shop.com/api/product/GetProducts, NSLocalizedDescription = nicht Antwort analysieren, _kCFStreamErrorDomainKey = 4, NSUnderlyingError = 0x78ecf180 {Fehler Domain = kCFErrorDomainCFNetwork-Code = -1017 "(null)" Userinfo = {_ kCFStreamErrorDomainKey = 4, _kCFStreamErrorCodeKey = -1}}}

Kann mir jemand sagen, was mache ich falsch? Ich habe diesen Link gesucht, aber nicht bekommen, was falsch ist. URL Encode Alamofire GET params with SwiftyJSON

Antwort

9

Ich glaube, Sie sollten den Parameter entfernen "encoding: ParameterEncoding.JSON", wie folgt aus:

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

Verwenden Sie diesen Code. Es ruft die in JSON korrekt analysierte Antwort ab.

Mit 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: Für Parameter mit GET Typ Dienst akzeptieren:

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

In diesem Fall versuchen, nicht zu manipulieren Ihre URL String und sende alle Parameter in Bezug auf Dictionary wie folgt.

+0

Yah ich weiß direkte URL gibt Antwort richtig. Aber ich möchte Parameter @ n.by übergeben.n –

+0

Es gibt zwei Möglichkeiten, wie Ihr Web-Service Parameter durch String-Manipulation (d. h. Parameter innerhalb der URL-Zeichenfolge) oder einen Dienst, der Parameter im JSON-Format akzeptiert, übernimmt. Im letzteren Fall sollte Ihre URL jedoch ohne Parameter sauber sein. (Das ist eine gute Übung). Um Parameter als JSON in einem GET-Service zu verwenden, bearbeite ich meine Antwort. Prüfen! –

+0

Yah .. Ich habe es gelöst .. –

1

Ihre requestGETURL wie das war in params

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


    } 
} 

Ihr Problem aussehen sollte es sein sollte sei [String:String] Wörterbuch. Sie müssen auch nicht die Codierung encoding:ParameterEncoding.JSON deklarieren.

Ich hoffe, es hilft Ihnen

Verwandte Themen