2016-02-13 4 views
10

Ich habe schon ein wenig daran gearbeitet, aber ich habe eine Funktion, die zu einem UIButton führt, um Alamofire-Aufrufe an meine Rails zu senden, die JSON verwenden.alamofire.error Code = -6006 "JSON konnte nicht serialisiert werden

ich verwende Swift 2, alamofire 3, XCode 7 & Rails 4 für meine api, die Heroku eingesetzt wird

ich erhalte diese Störung, wenn ich die Funktion abfeuern:

alamofire .error Code = -6006 "JSON konnte nicht serialisiert werden. Eingabedaten waren Null oder Null.

Hier ist mein Code:

@IBAction func Save(sender: AnyObject) { 

    let postsEndpoint: String = "https://APIURL" 
    let parameters = [ 
     "users": [ 
      "name": "James McHarty", 
      "avatar": "Some binary data", 
      "post": [ 
       "title": "First Test Post", 
       "body": "This is the first test post for the API", 
       "liked": "8", //will make INT later 
       "img": "more binary data" 
      ] 
     ] 
    ] 

    Alamofire.request(.POST, postsEndpoint, parameters: parameters, encoding: .JSON) 
     .responseJSON { response in 
      guard response.result.error == nil else { 
      // got an error in getting the data, need to handle it 
      print(response.result.error!) 
      return 
     } 

    } 

    print("func'd") 

} 
+1

Basierend auf der Fehlermeldung sieht es so aus, als ob Ihr Server keine Daten zurückgesendet hat. Haben Sie versucht, dieselbe Anfrage mit 'curl' oder einem ähnlichen HTTP-Tool zu stellen? Welche JSON-Struktur erwarten Sie? Warum sind Sie sicher, dass es sich um ein iOS-Problem und nicht um ein Rails-Problem handelt? –

+0

Das war hilfreiche Eingabe, so dass ich den Server behandelte und mit einer kleineren Anfrage (nur Benutzer) ging und mein Server eine POST-Anfrage annahm und diese nun anzeigt, wenn ich ein GET ausführe: [{"id": 1, "name": " Don McHart "," avatar ":" irgendein binärer Unsinn "," posts ": []}]. Das führt mich zu der Annahme, dass ich in den Parametern etwas falsch mache. –

+0

Sie können diese Frage schließen und eine neue Rails-Frage öffnen, wenn der Antworttext nicht dem entspricht, was Sie erwarten. –

Antwort

1

Dies ist nicht Alamofire oder swift Fehler, Die Antwort vom Server zurückgegeben wird, ist nicht im JSON-Format. Sie können Antwortdaten ausdrucken und prüfen, was darin falsch ist.

versuchen Sie diesen Code, um unsere Serverdaten auszudrucken, um Fehler leicht zu erkennen und zu beheben.

Alamofire.request("Your url").responseJSON(completionHandler: { (response) in 
    switch response.result { 
    case .success(let value): 
     break 

    case .failure(let error): 
     print("\n\n===========Error===========") 
     print("Error Code: \(error._code)") 
     print("Error Messsage: \(error.localizedDescription)") 
     if let data = response.data, let str = String(data: data, encoding: String.Encoding.utf8){ 
      print("Server Error: " + str) 
     } 
     debugPrint(error as Any) 
     print("===========================\n\n") 
    } 

}) 
3

Die Antwort vom Server zurückgegeben wird, ist nicht im JSON-Format. Sie können das Tool verwenden, um die Anfrage zuerst zu testen.

Drucke aus dem Fehlercode ist kein HTTP-Fehlercode, wegen des Ausfalls JSON zu lösen