2016-04-18 93 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

相關問題