2015-10-27 64 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