2016-08-26 13 views
4

私はSwiftのアプリケーションで作業しています。私はこのアプリからPHP webserviceを呼び出す必要があります。私がしましたSwift - POST要求パラメータとして配列をPHPに送信

let postParameters = "name="+teamName!+"&member="+memberCount!; 

let arr = ["aaa", "wassd", "wesdsd"] 

は今、私はこのようなパラメータとして、この配列を送信する必要があります。私はこの配列を持っている

// ViewController.swift 
// SwiftPHPMySQL 
// 
// Created by Belal Khan on 12/08/16. 
// Copyright © 2016 Belal Khan. All rights reserved. 
// 

import UIKit 

class ViewController: UIViewController { 

//URL to our web service 
let URL_SAVE_TEAM = "http://192.168.1.103/MyWebService/api/createteam.php" 


//TextFields declarations 
@IBOutlet weak var textFieldName: UITextField! 
@IBOutlet weak var textFieldMember: UITextField! 



//Button action method 
@IBAction func buttonSave(sender: UIButton) { 

    //created NSURL 
    let requestURL = NSURL(string: URL_SAVE_TEAM) 

    //creating NSMutableURLRequest 
    let request = NSMutableURLRequest(URL: requestURL!) 

    //setting the method to post 
    request.HTTPMethod = "POST" 

    //getting values from text fields 
    let teamName=textFieldName.text 
    let memberCount = textFieldMember.text 

    //creating the post parameter by concatenating the keys and values from text field 
    let postParameters = "name="+teamName!+"&member="+memberCount!; 

    //adding the parameters to request body 
    request.HTTPBody = postParameters.dataUsingEncoding(NSUTF8StringEncoding) 


    //creating a task to send the post request 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ 
     data, response, error in 

     if error != nil{ 
      print("error is \(error)") 
      return; 
     } 

     //parsing the response 
     do { 
      //converting resonse to NSDictionary 
      let myJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as? NSDictionary 

      //parsing the json 
      if let parseJSON = myJSON { 

       //creating a string 
       var msg : String! 

       //getting the json response 
       msg = parseJSON["message"] as! String? 

       //printing the response 
       print(msg) 

      } 
     } catch { 
      print(error) 
     } 

    } 
    //executing the task 
    task.resume() 

} 


override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


} 

:Webサービス用のコードの下

これを行う:

let postParameters = "name="+teamName!+"&member="+memberCount!+"&arr="+arr; 

が、このエラーを取得:

Expression was too long to be solved in a reasonable time. consider breaking the expression into distinct sub expressions.

任意の助けをいただければ幸いです。

+0

@NDocはい、編集者の質問です。間違ってここに入力しました – ripa

答えて

2

正確に達成しようとしていることについて少し混乱しますが、それはどのように動作していないform-url-encodedリクエストで配列を送信しようとしているようです。あなたは、配列を反復処理し、個別にそのようなものでリクエストパラメータの値に割り当てることができます

次のいずれか

var postParameters = "name=\(teamName)&member=\(member)" 
let arr = ["aaa", "wassd", "wesdsd"] 
var index = 0 

for param in arr{ 
    postParameters += "&arr\(index)=\(item)" 
    index++ 
} 
print(postParameters) //Results all array items as parameters seperately 

は勿論、これは汚れた液の種類であると私はに関する正しいだと仮定しています間違って配列を送信しようとしています。可能ならば、これは物事がはるかに簡単かつ少ない汚いなるだろうと、私は、application/json要求として要求を送信します:

func sendRequest() { 

    let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration() 

    /* Create session, and optionally set a NSURLSessionDelegate. */ 
    let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil) 


    guard var URL = NSURL(string: "http://192.168.1.103/MyWebService/api/createteam.php") else {return} 
    let request = NSMutableURLRequest(URL: URL) 
    request.HTTPMethod = "POST" 

    // Headers 

    request.addValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") 

    // JSON Body 

    let bodyObject = [ 
     "name": "\(teamName)", 
     "member": "\(member)", 
     "arr": [ 
      "aaa", 
      "wassd", 
      "wesdsd" 
     ] 
    ] 
    request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(bodyObject, options: []) 

    /* Start a new Task */ 
    let task = session.dataTaskWithRequest(request, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in 
     if (error == nil) { 
      // Success 
      let statusCode = (response as! NSHTTPURLResponse).statusCode 
      print("URL Session Task Succeeded: HTTP \(statusCode)") 
     } 
     else { 
      // Failure 
      print("URL Session Task Failed: %@", error!.localizedDescription); 
     } 
    }) 
    task.resume() 
    session.finishTasksAndInvalidate() 
} 

をうまくいけば、これは正しい方向にあなたを得ることができます。がんばろう!

+0

上記の解決策は私にエラーを与えません。しかし、それは動作していません。実際にJSONデータが正しくポストされていない – ripa

+0

あなたのPHPコードがJSONポストリクエストを正しく処理していることを確認する必要があります。 PHPでこれを試してみてください:$ json = file_get_contents( 'php:// input'); $ obj = json_decode($ json); –

+0

しばらくお待ちください - 今すぐ動作しています。 – ripa

関連する問題