2016-04-18 50 views
1

我有以下swift代码成功提交POST请求。Swift 2 JSON POST请求[字典与NSMutableURLRequest的HTTPBody字符串]

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) 

而不是使用像语法查询参数的,我想使用字典,但是当我做到以下几点:

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) 

(像我所看到周围),似乎提交请求,就好像身体是空的一样。

我的主要问题是:这些语法如何不同,以及结果请求如何不同?

:从JS来了,我在JavaScript环境中测试端点(jquery.com控制台)像下面,和它的工作成功:

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

X WWW的窗体-urlencoded VS应用/ JSON。您尚未将Content-Type标头字段设置为application/json。 – mrkbxt

+0

Omfg,我实际上花了三个小时试图找出这个s ** T ...一种方法不起作用,这是因为我也忽略了这一点。-_- – murphguy

回答

1

什么@mrkbxt说。这不是语法如何不同的问题,而是关于您的请求发送的不同数据类型的问题。 UTF8字符串编码文本是NSMutableURLRequest内容类型的默认值,这就是您的第一个请求起作用的原因。要在正文中使用JSON,您必须将内容类型切换为使用JSON。

以下添加到您的请求对象,以便它接受JSON:

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

是的,我曾尝试过,但它没有什么都不会改变。如果我在JS示例中查看请求,它也是'x-www-form-urlencoded',所以如果不指定内容类型,jquery可能正在从js对象转换为UTF8字符串编码文本。 ..我的服务器可能根本不接受json ...我会回报。 – jake

+0

就是这样,我正在查看请求的错误部分。多谢你们! – jake

相关问题