无法让POST与swift一起工作

问题描述:

我想将数据从我的应用程序发送到MySql数据库。我通过我的PHP脚本成功连接到数据库,但只记录了空白条目。即name =“”。 我认为我编码的数据不正确,但我不确定。无法让POST与swift一起工作

let name = "test" 
    let url = NSURL(string: posturl) 
    var request = NSMutableURLRequest(URL: url!) 
    request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") 
    request.HTTPMethod = "POST" 
    var postString: NSString = "name=\(name)" 

这是我相信我犯了一些错误,但老实说我不确定。我根本不熟悉swift/iOS开发!

var data: NSData = postString.dataUsingEncoding(NSASCIIStringEncoding)! 
    request.HTTPBody = data 

此外,我想知道这是否有必要。我看到它在示例中使用,但不确定它是否有用。

var conString: NSString = NSString(format:"%u", data.length) 
    request.setValue(conString as String, forHTTPHeaderField: "Content-Length") 

最后,我进行连接

var conn = NSURLConnection(request: request, delegate: self) 
    conn!.start() 
+0

UTF8通常使用,不ASCII。你尝试过吗? – jrturton

+0

尽量避免使用NSURLConnection,因为它在iOS 9中已被弃用。而不是使用NSURLSession –

+0

感谢看起来好像我简单地忘记了输入我的服务器POST方法所需的! OOPS。现在它正在使用这两种编码。 – patrickd

NSASCIIStringEncoding应该NSUTF8StringEncoding并尽量使其异步获得更好的性能

let posturl: String = "YOUR URL HERE" 
var url: NSURL = NSURL(string: posturl)! 
var request1: NSMutableURLRequest = NSMutableURLRequest(URL: url) 
request1.HTTPMethod = "POST" 
var postString = "name=\(name)" // Key and Value 
let data = postString.dataUsingEncoding(NSUTF8StringEncoding) 
request1.timeoutInterval = 60 
request1.HTTPBody=data 
request1.HTTPShouldHandleCookies=false 
let queue:NSOperationQueue = NSOperationQueue() 
NSURLConnection.sendAsynchronousRequest(request1, queue: queue, completionHandler:{ (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in 
     var err: NSError 
     var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary 
     println("AsSynchronous\(jsonResult)") 
})