2016-04-26 15 views
0

Ich benutze Alamofire, um ein Bild hochzuladen. Dies ist Anmelde-API, wo Sie sich mit Ihrem Profilfoto anmelden können (das muss ich hochladen)Alamofire .responseJSON funktioniert nicht mit JSON Antwort

Also mein Code ist dies (ich werde print (JSON) durch einen anderen Code ersetzen; dies ist nur zum Testen was falsch ist)

func makeUploadRequest(url: String?) { 

    let imageData = NSData(data: UIImageJPEGRepresentation(self.userImage.image!, 1)!) 

    Alamofire.upload(.POST, url!, headers: ["Content-Type":"application/json"], multipartFormData: { multipartFormData in 
     multipartFormData.appendBodyPart(data: imageData, name: "image_file_1") 
     }, encodingCompletion: { 
      encodingResult in 

      switch encodingResult { 
      case .Success(let upload, _, _): 
       upload.responseJSON { (JSON) in 
        print(JSON) 
       } 

      case .Failure(let encodingError): 
       //Show Alert in UI 
       print(encodingError) 
      } 
    }) 
} 

aber wenn ich diesen Code ausführen, stoße ich auf diese Nachricht:

FAILURE: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around 
character 0." UserInfo={NSDebugDescription=Invalid value around character 0.} 

ich weiß, warum ich diese Nachricht erhalten, ist es, weil die Antwort nicht im JSON-Format ist. Aber die Antwort ist eigentlich JSON

{ 
    result: "success", 
    msg: "", 
    data: {...} 
} 

Wenn ich die API mit URL zu testen, es funktioniert gut.

Als ich noch .responseString statt .responseJSON: sagte er etwas über ASP.NET

.response:

(Optional(<NSMutableURLRequest: 0x7f8353217d50> { URL: url }), 
Optional(<NSHTTPURLResponse: 0x7f8353099040> { URL: url } 
{ status code: 500, headers { 
"Cache-Control" = private; 
"Content-Length" = 5136; 
"Content-Type" = "text/html; charset=utf-8"; 
Date = "Tue, 26 Apr 2016 06:09:03 GMT"; 
Server = "Microsoft-IIS/7.5"; 
"X-AspNet-Version" = "2.0.50727"; 
"X-Powered-By" = "ASP.NET"; 
} }), Optional(<3c68746d ... 2e2d2d3e>), nil) 

Jede Hilfe? Danke im Voraus!

+0

versuchen '.responseString' statt' .responseJSON' Sie wissen, welchen Fehler Sie beim Senden der Anfrage machen. – Fennec

+0

@Fennec Oh ich versuchte .responseString & .response. Ich bearbeite meine Frage mit diesen – Joy

Antwort

1

Versuchen Erfolg Block zu ersetzen: -

case .Success(let upload, _, _): 
       upload.responseJSON { response in 
        debugPrint(response) 
        AppHelper.hideLoadingSpinner() 
        if response.result.value is NSNull 
        { 
         print("Response nil") 
        } 
        else 
        { 
         if let JSON = response.result.value { 
          var mydict = NSMutableDictionary() 
          mydict = JSON as! NSMutableDictionary 

          if (self.delegate != nil){ 
           print("response:--------------------\n %@",mydict) 
          } 
         } 
         else 
         { 
          print("response not converted to JSON") 
         } 

        } 
        upload.response(completionHandler: { (request, response, data, error) -> Void in 

          NSLog("upload.response : data : %@", String(data: data!, encoding: NSUTF8StringEncoding)!) 
          NSLog("upload.response : response : %@", response!) 


         }) 
    } 
+0

Versucht dies; Antwort wurde nicht in JSON konvertiert! – Joy

+0

Ok jetzt wollen Sie die Antwort sehen, ich bearbeite meine Frage nur verweisen. –

+0

upload.response: Antwort: {URL: ~~ url ~~} {Statuscode: 500, Header { "Cache-Control" = privat; "Inhaltslänge" = 5136; "Inhaltstyp" = "text/html; charset = utf-8"; Datum = "Di, 26 Apr 2016 05:59:39 GMT"; Server = "Microsoft-IIS/7.5"; "X-AspNet-Version" = "2.0.50727"; "X-Powered-By" = "ASP.NET"; }} – Joy

0

Überprüfen Sie Ihr Ergebnis, wenn es ein Erfolg oder Misserfolg ist, bevor der Wert bekommen. Zum Beispiel:

switch response.result { 
case .Success(let value): 
    print("Value: \(value)") 
    break 
case .Failure(let error): 
    print("Error: \(error)") 
    break 
} 
Verwandte Themen