2016-10-01 7 views
3

übergeben wird, wenn ich auf die neueste alles aufgerüstet (Alamo 4, Swift 3 und XC 8) die folgenden Parameter gestoppt veröffentlichen, und ich habe nicht einen Anhaltspunkt, warum ...Alamofire 4.0, params Swift 3 Beitrag nicht

let params = ["stripeToken": token.tokenId, 
       "name": name, 
       "email": email 
      ] 
    Alamofire.request(requestString, method: .post, parameters: params, encoding: JSONEncoding.default) 
     .responseJSON { (response) in 
      if response.result.value is NSNull { 
       return 
      } 
+0

Es gibt definitiv ein Problem mit jsonserialization.data. – Mark

+1

Hast du das behoben? Ich habe versucht, Vorschläge zu machen, aber immer noch nicht Param. – Ross

Antwort

1

Alles funktioniert genau so, wie es sollte. Hier ist ein kurzes Beispiel, das diese Tatsache demonstriert.

func testPostingJSON() { 
    let urlString = "https://httpbin.org/post" 

    let params: Parameters = [ 
     "stripeToken": "token_id", 
     "name": "cnoon", 
     "email": "[email protected]" 
    ] 

    let expectation = self.expectation(description: "should work") 

    Alamofire.request(urlString, method: .post, parameters: params, encoding: JSONEncoding.default) 
     .responseJSON { response in 
      if let json = response.result.value { 
       print("JSON: \(json)") 
      } else { 
       print("Did not receive json") 
      } 

      expectation.fulfill() 
     } 

    waitForExpectations(timeout: 5.0, handler: nil) 
} 

Hoffentlich hilft dieses Beispiel Ihnen, das Problem zu lokalisieren. Prost.

+0

Ihr Code testet nichts .... Es zeigt nur, dass die .responseJSON keinen Fehler zurückgibt, es zeigt nicht, dass die Parameter an den Server gesendet wurden. – Mark

+0

Ich habe den gesamten Code durchgegangen und es gibt ein Problem mit JSONSerialization.data, das die Größe der übergebenen Parameter in Byte zurückgibt, was bedeutet, dass keine Parameter an den Server gesendet wurden. – Mark

+0

als Ergebnis .responseJSON gibt ohne Fehler zurück, aber der Server erhält die Parameter für die serverseitige Verarbeitung nicht. Ich habe die URL-Codierung korrigiert. – Mark

13

hatte ich ein ähnliches Problem, ich Codierung von JSONEncoding.default

Alamofire.request(URL, method: .post, parameters: params, encoding: URLEncoding.httpBody).responseJSON { response in 

    if let data = response.data { 
     let json = String(data: data, encoding: String.Encoding.utf8) 
     print("Response: \(json)") 
    } 
} 
6

ich das gleiche Problem haben URLEncoding.httpbody geändert und es schließlich fixiert. URLEncoding.httpBody hat nicht für mich funktioniert ... aber URLEncoding.default hat.

Also änderte ich JSONEncoding.default zu URLEncoding.default.

Es übergibt jetzt die Parameter an das Backend.

Alamofire.request(loginURL, method: .post, parameters: params, encoding: URLEncoding.default, headers: nil) 
Verwandte Themen