Alamofire JSON konnte nicht serialisiert werden
Ich versuche, eine PHP-Post-request mit Alamofire in meinem swift app, die SMS zu versenden mit der OVH api, aber ich habe ein Problem :
FAILURE: Error Domain=com.alamofire.error Code=-6006 "JSON could not be serialized. Input data was nil or zero length." UserInfo={NSLocalizedFailureReason=JSON could not be serialized. Input data was nil or zero length.}
Ich bin mir nicht finden, wie zu sehen, echos aus dem PHP-Skript, um es zu lösen. Ich denke nicht, dass es eine Alamofire problem, weil ich für eine andere Anforderung zum senden von E-Mails und es funktioniert gut. Hier ist meine Anfrage, wo gibt es die Fehlermeldung :
func sendSmsAutoRequest(completionHandler: (responseObject: NSDictionary?, error: NSError?) -> ()) {
let prefs = NSUserDefaults.standardUserDefaults()
let username = prefs.stringForKey(StorageManager.USER_NAME)!
let messageText = prefs.stringForKey(StorageManager.MESSAGE_TEXT)!
let parameters = ["contactsSms": contactsSms, "username": username, "messageText": messageText]
request(.POST, "http://XXX/dontworry/sendAutoSms.php", parameters: (parameters as! [String : AnyObject])).responseJSON { response in
print(response)
}
}
und hier ist mein Skript :
<?php
require __DIR__ . '/vendor/autoload.php';
use \Ovh\Api;
$applicationKey = "XXX";
$applicationSecret = "XXX";
$consumer_key = "XXX";
$endpoint = "ovh-eu";
$contactsSms = $_POST['contactsSms'];
$userName = $_POST['username'];
$messageText = $_POST['messageText'];
$conn = new Api($applicationKey,
$applicationSecret,
$endpoint,
$consumer_key);
$smsServices = $conn->get('/sms/');
$content = (object) array(
"charset"=> "UTF-8",
"class"=> "phoneDisplay",
"coding"=> "7bit",
"message"=> $messageText,
"noStopClause"=> true,
"priority"=> "high",
"receivers"=> $contactsSms,
"senderForResponse"=> true,
"validityPeriod"=> 2880
);
$resultPostJob = $conn->post('/sms/'. $smsServices[0] . '/jobs/', $content);
$smsJobs = $conn->get('/sms/'. $smsServices[0] . '/jobs/');
echo '{"contacts": $contactsSms,"username": $username, "messageText": $messageText, "result": $resultPostJob, "sms": $smsJobs}'; ?>
EDIT : Es scheint zu funktionieren, ich habe keine Fehler mehr ! Aber die SMS wird nicht gesendet...
- Versuchen Sie
parameters as! [String : AnyObject], encoding: .JSON)
.. Eventuell versuchenparameters as! [String : String], encoding: .JSON)
wenn Sie können - Nein, die Antwort ist JSON. Aber wenn du dir den PHP-code, der web-service erwartet, ist
application/x-www-form-urlencoded
Anfrage. Die Anforderung JSON macht die situation noch schlimmer. - Karz, helmbert korrekt diagnostiziert ein problem hier. Erstellen von assoziativen array und dann
json_encode
es. Beachten Sie auch Ihre PHP-bezieht sich auf$userName
im Eingangs-und$username
im Ausgang (aber nie wirklich nutzen?). Wenn Ihr SMS ist noch nicht raus, aber Sie brauchen, um zu diagnostizieren, was Los ist. Sie sind einschließlich$contactsSms
,$username
, und$messageText
im zurückgegebenen JSON, so wie das Aussehen? Was war$smsJobs
? Bearbeiten Sie Ihre Frage und zeigen uns was diesesresponse.result.value
aussah.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom ersten Lesen Ihre PHP-Skript, wahrscheinlich druckt ungültiges JSON. Die folgende Anweisung print JSON enthält, die nicht in Anführungszeichen gesetzte strings (vorausgesetzt, eine oder mehrere der Parameter, wie
$_POST['messsageText']
enthalten string-Werte):Beispiel für die Ausgabe (pretty-Print für bessere Lesbarkeit):
Ich würde vorschlagen, setzen auf der PHP -
, die Funktionen json_encode
Funktion zum generieren von gültigen JSON-Ausgabe:Dies war ein bug in alamoFire, das wurde behoben in Version 3.1.1, siehe pull #889, die gefixte version funktioniert nur, wenn Ihr REST wie service gibt Antwort 204 (NO_RESPONSE), die in der Theorie der richtige Weg, es zu tun.
Serialisieren ist der Prozess, der konvertiert ein Objekt in einen JSON-string. Das problem ist also nicht der Umgang mit Ihrer Antwort, aber das von Ihr verlangen.
Melden die Inhalte Ihrer
parameters
Wörterbuch, und überprüfen Sie den Wert nil.