2016-12-27 9 views
3

私はSwift 3とAlamofire 4.0を使用しています。私はスクリーンショットに示されている郵便配達依頼と同様のAlamofire POSTリクエストを作成したい投稿方法リクエストAlamofire

enter image description here

は、私はこれらのコード行で試してみた:

var parameters: [String: Any] = [ 
    "client_id" : "xxxxxx", 
    "client_secret" : "xxxxx", 
    "device_token" : "xxxx", 
    "fullname" : "xxxxx", 
    "gender": "xxx" 
] 

Alamofire.request(url, method: .post, parameters: parameters).responseJSON { response in 
print(response) 
} 

しかし、私はこのエラーを得ました:

enter image description here

Swift 3のAlamofireを使用してフォームデータとしてBodyでPOSTリクエストを実装する方法は?

+1

レスポンスのシリアル化に問題があります。 JSON形式ですか? –

+0

エラーを見ると、* response *が有効なJSONではないことを示していますので、まずレスポンスを見てみてください。 (例えば、Charlesを使用してください) –

+0

http://stackoverflow.com/questions/31982513/how-to-send-a-post-request-with-body-in-swift –

答えて

0
  • スウィフト3.0を試すsuccededているしようとした後 - Alamofire - マルチパートフォームデータのアップロードのためのワーキングコード*

//パラメータ

let params: [String : String] = 
    ["UserId" : "\(userID)", 
    "FirstName" : firstNameTF.text!, 
    "LastName" : lastNameTF.text!, 
    "Email"  : emailTF.text! 
    ] 

//アップロードする

Alamofire.upload(
     multipartFormData: { multipartFormData in 

      for (key, value) in params 
      { 
        multipartFormData.append((value.data(using: .utf8))!, withName: key) 
      } 
    }, 
     to: url, 
     encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .success(let upload, _, _): 
       upload.responseJSON { response in 
        debugPrint(response) 

       } 
       upload.uploadProgress(queue: DispatchQueue(label: "uploadQueue"), closure: { (progress) in 


       }) 

      case .failure(let encodingError): 
       print(encodingError) 
      } 
    } 
    ) 

まだ問題がある場合は教えてください。

+0

私はSwiftプログラミングの初心者です。 'completionhandler()'はどういう意味ですか?私はエラー: '未解決の識別子 'completionhandler''を使用していますが、ソースコードを削除してもうまく動作し、サーバーからJSON応答が得られました。 – user1994

+0

コードからすべてのcompletionHandler行を削除します –

+0

それは何のためですか?それはあなたのプロジェクトのコードですか? :D – user1994

0

すぎて、私はとてもこの

override func viewDidLoad() { 
     super.viewDidLoad() 


     let parameters: Parameters = ["client_id": "1","user_token":"xxxxxxxx"] 
       // Do any additional setup after loading the view, typically from a nib. 
     let url = "http://xxxxxxxxxxx/index.php/Web_api/get_client_profile" 
     //let timeParameter = self.getLastTimeStamp() 
     self.request = Alamofire.request(url, method: .post, parameters:parameters) 
     if let request = request as? DataRequest { 
      request.responseString { response in 
       //PKHUD.sharedHUD.hide() 
       do{ 
        let dictionary = try JSONSerialization.jsonObject(with: response.data!, options: JSONSerialization.ReadingOptions.allowFragments) as! NSDictionary 
        print(dictionary) 

       }catch{ 

       } 
      } 
     } 
    } 

    var request: Alamofire.Request? { 
     didSet { 
      //oldValue?.cancel() 
     } 
    } 
0

Alamofireを使用してリクエストを送信できます。

let url = "" 
let headers = [ "Content-Type" : "application/json"] 
let para : Parameters = [ "data" : JSONObject] 
Alamofire.request(url, method: .post, parameters: para, encoding: JSONEncoding.default, headers : headers) 
    .responseJSON { response in 

     print(response) 
     print(response.result) 

} 
0

何も心配しないでください。 Swatch 2.0/2.2でAlamofireのリクエスト方法がそれほど変わっていない場合(Swift 3.0の場合)あなたが古い方法を理解すれば、あなたはこのことも簡単に理解することができます。 //あなたのAPIのURL文字列

  • .post/

    1. apiToHit - 今ここに私の場合は

      Alamofire.request(apiToHit, method: .post, parameters: parametersObject, encoding: JSONEncoding.default, headers: headerForApi).responseJSON { response in switch response.result{ 
      
          case .success(_): 
           if let receivedData: Any = response.result.value{ 
            if let statusCode: Int = response.response?.statusCode { 
             //Got the status code and data. Do your data pursing task from here. 
            } 
           }else{ 
            //Response data is not valid, So do some other calculations here 
           } 
          case .failure(_): 
            //Api request process failed. Check for errors here. 
          } 
      

      - 今すぐ次の定型に近い見てみましょう/リクエストの方法。 .post、.get、.put、.deleteなど必要に応じてこのメソッドを変更できます。

    2. parametersObject //この特定のAPIに必要なパラメータ。郵便配達員などに "身体"を送る場合も同じです。このパラメータは[String: Any]の形式である必要があります。これが必要ない場合は、nilを渡すことができます。

    3. JSONEncoding.default //これはエンコード処理です。私の場合、私はここに期待される.defaultと設定しています。必要に応じてこれを.prettyPrintedに変更することもできます。

    4. headerForApi //これは、apiをリクエストしている間に送信したいヘッダーです。私の場合は[String: String]形式です。これが必要ない場合は、nilを渡すことができます。

    5. .responseJSON // JSON形式の応答を期待する。必要に応じてこれを変更することもできます。

    さて、私の要求に私がresponse in switch response.result{のような結果を確認するために要求クロージャ内のスイッチを使用しています。

    インサイドcase .success(_):場合は、私はまた、これが助けたこの

    if let receivedData: Any = response.result.value{ 
        if let statusCode: Int = response.response?.statusCode { 
    } 
    } 
    

    希望のように、同様の結果データとhttpステータスコードをチェックしています。ありがとう。

  • 関連する問題