2016-06-06 5 views
3

Ich habe dieses Tutorial folgen: https://devdactic.com/parse-json-with-swift/ Und habe jede Anleitung so wie sie ist. Aber ich konnte einfach nicht die HTTP-Post-Anfrage funktionieren, da es scheint, dass mein API-Dienst den angeforderten Parameter nicht bekommen kann. Das ist also meine Httppost-Request-Methode:So erstellen Sie eine Post-Anfrage mit SwiftyJSON

private func makeHTTPPostRequest(path: String, body: [String: AnyObject], onCompletion: ServiceResponse) { 
     let request = NSMutableURLRequest(URL: NSURL(string: path)!) 

     // Set the method to POST 
     request.HTTPMethod = "POST" 

     do { 
      // Set the POST body for the request 
      let jsonBody = try NSJSONSerialization.dataWithJSONObject(body, options: .PrettyPrinted) 

      request.HTTPBody = jsonBody 
      let session = NSURLSession.sharedSession() 

      let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 
       if let jsonData = data { 
        let json:JSON = JSON(data: jsonData) 

        onCompletion(json, nil) 

       } else { 

        onCompletion(nil, error) 
       } 

      }) 
      task.resume() 

     } catch { 
      // Create your personal error 
      onCompletion(nil, nil) 
     } 
    } 

dann i eine Funktion erstellt haben, es zu nennen:

func registerNewUser(email: String,url: String, onCompletion: (JSON) -> Void) { 

     let route = baseURL + url 

     print(route) 

     let postItems:[String: String] = ["email": email] 
     print("postitems",postItems) 



     makeHTTPPostRequest(route, body: postItems, onCompletion: { json, err in 

      onCompletion(json as JSON) 

      print("response",json) 

     }) 

    } 

Dann ist es von Anmeldungen Controller Aufruf:

func requestSignUp() 
    { 
     if((emailField.text?.isEmpty) == false) 
     { 
     //performSegueWithIdentifier("showVerification", sender: signUpBtn) 

      let url = "user/signup" 
      RestApiManager.sharedInstance.registerNewUser(emailField.text! as String, url: url as String, onCompletion: { 
       (json: JSON) in if let results = json[0].array { 
        for entry in results { 

         print(entry) 

        } 
       } 
      }) 

     } 
    } 

der Druck zeigt die format der postitems unter register benutzer wie:

postitems ["em ail ": "dasdsd"]

Und meine Service-Antwort zeigt dies:

response { 
    "responseData" : { 

    }, 
    "responseStat" : { 
    "status" : false, 
    "isLogin" : false, 
    "requestError" : [ 

    ], 
    "msg" : "The email field is required.", 
    "extra" : { 

    } 
    } 
} 

der E-Mail-Feld-Parameter ist E-Mail und erfolgreiche Einreichung wäre es so etwas wie dies zeigt:

{ 
    "responseStat": { 
    "status": true, 
    "isLogin": false, 
    "msg": "Successfully Registered an, your password has been sent to your email", 
    "requestError": [], 
    "extra": {} 
    }, 
    "responseData": "" 
} 

Antwort

3

Hinzufügen dieser Zeile in meinem makeHTTPPostRequest hat es funktioniert:

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

Sie gute sir sind ein Lebensretter! Vielen Dank! – Jakub

0

können Sie Alamofire verwenden neben SwiftyJSON mit Leichtigkeit:

static func requestToSendObject(value: YOUROBJECT) { 
    let url = NSURL(string: "http://google.com")! 
    let params: [String: AnyObject] = [ 
     "object_key" : value 
    ] 
    Alamofire.request(.POST, url, parameters: params, encoding: .JSON, headers: nil).responseJSON { 
     if let data = response.result.value { 
      let responseJSON = JSON(data) 
      // Use the responseJSON 
     } 
    } 
}