2016-04-18 6 views
1

Ich habe den folgenden Swift-Code, der eine POST Anfrage erfolgreich übermittelt.Swift 2 JSON POST-Anfrage [Wörterbuch und String für HTTPBody von NSMutableURLRequest]

let request = NSMutableURLRequest(URL: NSURL(string: url)!) 
let session = NSURLSession.sharedSession() 
request.HTTPMethod = "POST" 
request.HTTPBody = "foo=bar&baz=lee".dataUsingEncoding(NSUTF8StringEncoding) 

let task = session.dataTaskWithRequest(request, completionHandler: completionHandler) 

Stattdessen Abfrageparameter wie Syntax verwenden, würde Ich mag ein Wörterbuch verwenden, aber wenn ich folgendes tun:

let request = NSMutableURLRequest(URL: NSURL(string: url)!) 
let session = NSURLSession.sharedSession() 
request.HTTPMethod = "POST" 
request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(["foo":"bar", "lee":"baz"], options: []) 

let task = session.dataTaskWithRequest(request, completionHandler: completionHandler) 

(wie das, was ich um gesehen habe), wie es scheint um die Anfrage zu stellen, als wäre der Körper leer.

Meine Hauptfrage ist: Wie unterscheiden sich diese Syntaxen, und wie unterscheiden sich die resultierenden Anforderungen?

HINWEIS: Von JS, ich bin in einer JavaScript-Umgebung um den Endpunkt zu testen (jquery.com Konsole), wie die folgenden, und es funktioniert erfolgreich:

$.ajax({ 
    url: url, 
    method: 'POST', 
    data: { 
    foo: 'bar', 
    baz: 'lee' 
    } 
}); 
+4

x-www-form-urlencoded vs application/json. Sie haben das Content-Type-Header-Feld nicht auf application/json gesetzt. – mrkbxt

+0

Omfg, ich habe tatsächlich drei Stunden damit verbracht, dieses s ** T out herauszufinden ... eine Methode funktionierte nicht und es war, weil ich das auch verwarf .. -_- – murphguy

Antwort

1

Was sagte @mrkbxt. Es kommt nicht darauf an, wie sich die Syntax unterscheidet, sondern auf die unterschiedlichen Datentypen, die Sie mit Ihrer Anfrage senden. UTF8-Zeichenfolge codierter Text ist der Standardwert für NSMutableURLRequest Inhaltstyp, weshalb Ihre erste Anfrage funktioniert. Um einen JSON im Body zu verwenden, müssen Sie den Inhaltstyp auf JSON umstellen.

folgendes auf Ihre Anfrage Objekt hinzufügen, so dass es JSON akzeptiert:

request.setValue("application/json", forHTTPHeaderField: "Content-Type") 
+0

Ja, ich hatte das versucht, aber es war nicht ändere nichts. Wenn ich mir die Anfrage im JS-Beispiel anschaue, ist es auch "x-www-form-urlencoded", also führt jquery möglicherweise eine Konvertierung von einem js-Objekt in UTF8-codierten Text durch, wenn Sie keinen Inhaltstyp angeben. .. mein Server könnte JSON überhaupt nicht akzeptieren ... Ich melde mich zurück. – jake

+0

Yup das war es, ich schaute auf den falschen Teil der Anfrage. Danke Leute! – jake