2016-10-01 4 views
3

Когда я повышен до последнего все (Alamo 4, Swift 3 и XC 8) следующие параметры размещения остановились, и я не имею ни малейшего понятия, почему ...Alamofire 4,0, Swift 3 Сообщение Params не передается

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

Существует определенно проблема с jsonserialization.data. – Mark

+1

Вы исправили это? Я попробовал предложения ниже, но все еще не прошел параметры. – Ross

ответ

1

Все работает точно так, как должно. Вот краткий пример, демонстрирующий этот факт.

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

Надеюсь, этот пример поможет вам определить проблему. Приветствия.

+0

Ваш код ничего не тестирует .... Он просто показывает, что .responseJSON не возвращает ошибку, он не показывает, что параметры были отправлены на сервер. – Mark

+0

Я прошел через весь код, и есть проблема с JSONSerialization.data, он возвращает размер в байтах переданных ему параметров, что фактически означает, что на сервер не были отправлены параметры. – Mark

+0

.responseJSON возвращается без ошибок, но сервер не получает параметры для обработки на стороне сервера. Я исправил с помощью URL-кодирования. – Mark

13

У меня была аналогичная проблема, я изменил кодировку от JSONEncoding.default до URLEncoding.httpbody

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

У меня такая же проблема, и, наконец, установил ее. URLEncoding.httpBody не работает для меня ... но URLEncoding.default.

Так что я изменил JSONEncoding.default к URLEncoding.default.

Теперь передаются параметры на сервер.

Alamofire.request(loginURL, method: .post, parameters: params, encoding: URLEncoding.default, headers: nil) 
Смежные вопросы