2015-10-27 31 views
0

我试图通过获取PHP脚本的HTML来使用Swift通过PHP连接到MySQL数据库。我打算使用URL将用户名,密码或ID等变量传递给PHP脚本,然后调用MySQL。但是,每当我尝试获得NSURL网页的响应时都会发生错误。这里是我使用的代码:如何格式化HTML,PHP使用Swift的NSURL可读

let myUrl = NSURL(string: "http://www.google.com") 
    let request = NSMutableURLRequest(URL: myUrl!) 
    request.HTTPMethod = "POST" 
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
     data, response, error in 
     let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
     if error != nil { 
      print("Error: \(error)") 
     } 
     print("Response: \(response)") 
     print("Response String: \(responseString)") 
    } 
    task.resume() 

我需要格式化从网站被正确传送到斯威夫特的输出?感谢您的帮助。

回答

0

您的代码在Xcode 7.1的游乐场中运行,不会产生任何错误。为了让异步代码在操场上执行,我添加了2行。亲自尝试一下。所以我想问题在于你的服务器。

import Foundation 
import XCPlayground 

// Let asynchronous code run 
XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 

let myUrl = NSURL(string: "http://www.google.com") 
let request = NSMutableURLRequest(URL: myUrl!) 
request.HTTPMethod = "POST" 
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
    data, response, error in 
    let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
    if error != nil { 
    print("Error: \(error)") 
    } 
    print("Response: \(response)") 
    print("Response String: \(responseString)") 
} 
task.resume() 

如果你不能弄清楚什么是错的,共享的错误信息会帮助别人找出发生了什么事。

更新: 我想你的代码中的iOS项目中的代码崩溃,因为你不检查,如果该数据是零,就在这条线展开它:

let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 

但是,为什么数据原来是是无?这是因为iOS 9中的应用传输安全性不允许您默认使用HTTP。您的服务器必须是TLS v1.2或更高版本的HTTPS。要允许HTTP请求,请参阅:Configuring App Transport Security Exceptions in iOS 9 and OSX 10.11

另外,您应该在使用数据以避免崩溃之前检查错误。

let myUrl = NSURL(string: "http://www.google.com") 
let request = NSMutableURLRequest(URL: myUrl!) 
request.HTTPMethod = "POST" 
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
    data, response, error in 
    // Check error before using the data 
    if error != nil { 
    print("Error: \(error)") 
    return 
    } 
    let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding) 
    print("Response: \(response)") 
    print("Response String: \(responseString)") 
} 
task.resume() 
+0

谢谢你的帮助。这段代码在Playground中运行良好,但是当我尝试使用它(减去Playground导入和无限执行行)时,应用程序崩溃。我目前有这个代码在UI Button按钮上执行,然后将标签更改为'responseString'。我没有收到任何我可以理解的错误信息,该应用程序崩溃。感谢您的帮助 –

+0

我已经更新了我的答案。看看是否能解决你的问题 – cezheng