Alamofire responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)
Hatte ich einige code, der war erste Ergebnisse aus einer MySQL-DB auf einem entfernten web-server. Es ist nicht mehr funktioniert und ich erhalte die Meldung responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)
. Hier ist ein code...
Alamofire.request(ADS_URL, method: .get).validate().responseJSON { response in
print("Request: \(String(describing: response.request))") //original url request
print("Response: \(String(describing: response.response))") //http url response
print("Result: \(response.result)") //response serialization result
switch response.result {
case .success(let value):
let json = JSON(value)
print ("JSON: \(json)")
if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {
print("Data: \(utf8Text)") //original server data as UTF8 string
}
case .failure(let error):
print("Error while querying database: \(String(describing: error))")
return
}
}
Ich bin auch mit SwiftyJSON. Hier sind die Ergebnisse der code...
Request: Optional(http://doyouado.com/adscan/get_ads)
Response: Optional(<NSHTTPURLResponse: 0x17502f3a0> { URL: http://doyouado.com/adscan/get_ads } { status code: 200, headers {
Connection = "keep-alive";
"Content-Length" = 0;
"Content-Type" = "text/html; charset=UTF-8";
Date = "Mon, 18 Sep 2017 16:04:37 GMT";
Server = "nginx/1.12.1";
"Set-Cookie" = "ado_session=a%3A5%3A%7Bs%3A10%3A%22session_id%22%3Bs%3A32%3A%225019d90891c70c81df8ebc2fe754a68f%22%3Bs%3A10%3A%22ip_address%22%3Bs%3A15%3A%22109.150.214.128%22%3Bs%3A10%3A%22user_agent%22%3Bs%3A86%3A%22ADoBroadcaster%2F1.0+%28com.GaryFrank.ADoBroadcaster%3B+build%3A1%3B+iOS+10.3.3%29+Alamofire%2F4.5.0%22%3Bs%3A13%3A%22last_activity%22%3Bi%3A1505750677%3Bs%3A9%3A%22user_data%22%3Bs%3A0%3A%22%22%3B%7D3130ef6f5541e6f944da5a5a1292350bf203fa1b; expires=Mon, 18-Sep-2017 18:04:37 GMT; Max-Age=7200; path=/";
} })
Result: FAILURE
Error: responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.inputDataNilOrZeroLength)
Habe ich versucht, mit .response
und .responseString
, aber ich bekomme keine Informationen zurückgegeben. Ich bin komplett ratlos. Das war alles wunderbar funktioniert. Hoffentlich gibt es jemanden, der etwas Licht in diese Schuppen?
- Sind Sie sicher, dass die url verweist auf ein gültiges json?
- Die URL ist ein php-script mit MySQL-Abfragen und gibt die Ergebnisse als JSON. echo die Funktionen json_encode($anzeigen);
- Versuchen Sie es mit
responseString
stattresponseJSON
und drucken Sieresponse.result.value
und sehen, warum es ist nicht in der Lage, zu serialisieren. Haben Sie vielleicht html oder so etwas. - Mit responseString, wird ein leerer string zurückgegeben Antwort.Ergebnis.Wert. Wenn ich die URL in meinem browser, ich kann sehen, dass die Daten im JSON-format. Ich habe die JSON. Es ist gültig.
- vielen Dank, es war hilfreich für mich!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was für mich gearbeitet wurde die änderung der Codierung von JSONEncoding.standardmäßig URLEncoding.Standard!
Einfach ändern
.responseJSON
zu.responseData
.Und nach das analysieren von Daten:
wurde und kein Fehler:
Häufigsten kommt dieser Fehler, wenn Sie Ihre API 'GET' - Typ und passieren Sie 'POST' geben.
Dem gleichen problem Stand ich vor und meine Lösung ist ich ersetzen
.post
zu.get
und dann dieser Fehler beseitigt.Für AFNetworking 3.0 :-
gehen Pfad angegeben,
pods > Hülsen > AFNetworking > Serialisierung > AFURLResponseSerialization.m
dann ersetzen Sie die Zeile Nein 228 (
self.acceptableContentTypes = [NSSet setWithObjects:@"application/json", @"text/json", @"text/javascript", nil];
)mit
Weil Ihre Reaktion in form von
text/html
aber das ist nicht erwähnt in AFNetworking dann haben wir es manuell hinzufügen.Hinweis:- ich Debuggen dieses Problems für Alamofire.
Wenn server sendet keine Antwort, Alamofire zeigt diese Nachricht in der
.failure
blockieren, wenn Sie zum drucken die Fehlermeldung. Technisch ist es nicht ein Fehler. Alamofire didn ' T show this message in seinen früheren Versionen, aber seit einem der letzten updates, es begann, es zu zeigen.Als ich sagte, es ist nicht wirklich ein Fehler, aber für mich ist es ein bug in Alamorfire. Und es ist sehr ärgerlich und irreführend, zu sehen, wie sich diese in deinem log, wenn es keine Fehler auf dem client oder server-Seite.
Hier ist, wie ich Stille es:
if (response.data?.count)! > 0 {print(error)}
Und ich Tue es, wenn es keine Antwort vom server, das ist das erwartete Verhalten, da der server soll nicht zum senden der Antwort in einigen Fällen.
Damit die Fehlermeldung nicht zeigt, wenn nichts vom server zurückgegeben werden. Meiner Meinung nach sollte dies das Standard-Verhalten.
Obwohl die Frage schon Recht alt ist, wollte ich anderen zur Verfügung zu stellen, was ich vor kurzem entdeckt habe.
Da die Fehlermeldung ist sehr allgemein und es hilft nicht viel, zu überprüfen, dass das url-format, die Sie verwenden richtig ist. Ich habe dies nur zu entdecken, dass das url-format nicht korrekt war. Einmal Feste begannen die Dinge funktionieren.