2015-10-27 1 views
0

Я пытаюсь подключиться к базе данных MySQL с помощью Swift через PHP, получив HTML-скрипт PHP. Я планирую использовать URL для передачи таких переменных, как имя пользователя, пароль или идентификатор, в PHP-скрипт, а затем вызывать MySQL. Однако всякий раз, когда я пытаюсь получить ответ на веб-страницу с NSURL, возникает ошибка. Вот код, я использую:Как форматировать HTML, PHP для чтения с помощью NSURL Swift

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() 

Если вы не можете понять, что случилось, поделитесь сообщением об ошибке, чтобы помочь другим узнать, что произошло.

UPDATE: Я попробовал ваш код в проекте IOS кодовыми аварии, потому что вы не проверять, если данные ноль и просто разворачивать его на этой линии:

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

Но почему данные оказывается быть ноль? Это связано с тем, что App Transport Security в iOS 9 не позволяет использовать HTTP по умолчанию. Ваш сервер должен быть HTTPS с TLS v1.2 или выше. Чтобы разрешить 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, однако, когда я пытаюсь его использовать (за вычетом импорта игровой площадки и бесконечной строки выполнения), приложение выходит из строя. В настоящее время этот код выполняется при нажатии кнопки UI, а затем заменяет метку на «responseString». Я не получаю сообщений об ошибках, которые я могу понять, приложение просто падает. Спасибо за помощь. –

+0

Я обновил свой ответ. Посмотрите, решит ли это вашу проблему – cezheng

 Смежные вопросы

  • Нет связанных вопросов^_^