如何使用 JSON Swift 和 PHP 解决从服务器接收数据时的空响应


How to solve Null response on receive data from server with JSON Swift and PHP

我正在尝试使用 Swift、JSON 和 PHP 从应用程序和服务器发送和接收数据,但我收到所有空值。服务器的响应是:

 porte
 <null>
 venditore
 <null>
 cilindrata
 <null>
 ordine
 <null>
 catalizzatore
 <null>
 IVA
 <null>
 percentualeammortamento
 <null>
 cognome
 <null>
 garanzia
 <null>
 targa
 <null>
 alimentazione
 <null>
 marca
 <null>
 KM
 <null>
 sinistri
 <null>
 modello
 <null>
 telaio
 <null>
 indirizzo
 <null>
 data
 <null>
 colore
 <null>
 dossier
 <null>

这是我的代码:

import UIKit
class SaveViewController: UIViewController,UIImagePickerControllerDelegate,UINavigationControllerDelegate {

var data_save:String! ="SomeString"
var venditore_save:String! ="SomeString"
var ordine_save:String! ="SomeString"
var dossier_save:String! ="SomeString"
var marca_save:String! ="SomeString"
var modello_save:String! ="SomeString"
var cilindrata_save:String! ="SomeString"
var targa_save:String! ="SomeString"
var telaio_save:String! ="SomeString"
var alimentazione_save:String! ="SomeString"
var catalizzatore_save:String! ="SomeString"
var porte_save:String! ="SomeString"
var colore_save:String! ="SomeString"
var km_save:String! ="SomeString"
var garanzia_save:String! ="SomeString"
var incidenti_save:String! ="SomeString"
var cognome_save:String! ="SomeString"
var indirizzo_save:String! ="SomeString"
var iva_save:Bool! ="SomeString"
 var percentualeammortamento_save:String! ="SomeString"
 @IBAction func btnSignUp_Clicked(sender: UIButton) {
let parameters = ["data":data_save, "venditore":venditore_save, "dossier":dossier_save,"ordine":ordine_save, "cognome":cognome_save,"indirizzo":indirizzo_save, "marca":marca_save, "modello":modello_save, "targa":targa_save, "telaio":telaio_save, "cilindrata":cilindrata_save, "alimentazione":alimentazione_save, "catalizzatore":catalizzatore_save, "KM":km_save, "porte":porte_save, "colore":colore_save, "sinistri":incidenti_save, "garanzia":garanzia_save, "IVA": String(iva_save), "percentualeammortamento":percentualeammortamento_save] as Dictionary<String, String>

    let url = NSURL(string: "myurl") //change the url

    let session = NSURLSession.sharedSession()

    let request = NSMutableURLRequest(URL: url!)
    request.HTTPMethod = "POST" //set http method as POST
    let err: NSError?

    request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(parameters, options:[])

    request.addValue("application/json", forHTTPHeaderField: "Content-Type")
    request.addValue("application/json", forHTTPHeaderField: "Accept")


    let task = session.dataTaskWithRequest(request) { data, response, error in
        guard data != nil else {
            print("no data found: '(error)")
            return
        }

        do {
            if let json = try NSJSONSerialization.JSONObjectWithData(data!, options:[]) as? NSDictionary {
                let success = json["success"] as? Int                                  
                print("Success: '(success)")
            } else {
                let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)    // No error thrown, but not NSDictionary
                print("Error could not parse JSON: '(jsonStr)")
            }
        } catch let parseError {
            print(parseError)                                                          
            let jsonStr = NSString(data: data!, encoding: NSUTF8StringEncoding)
            print("Error could not parse JSON: ''(jsonStr)'")
        }
    }
    task.resume()
}


  @IBAction  func btnLoadUser_Clicked(sender: UIButton) {
let url = NSURL(string: "myurl")
let request = NSMutableURLRequest(URL: url!)

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
    data, response, error in
    if data == nil {
        print("request failed '(error)")
        return
    }

        do{
            let json = try! NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers) as! NSDictionary
                for (key, value) in json {

                    let data = try! NSJSONSerialization.dataWithJSONObject([key, value], options:[])

                    print(key)
                    print(value)}
}catch {
            print("bom bom bom error")
        }
    }
    task.resume() } }

这是 php 代码:

   <?php 
$ricambio = array();
$ricambio['data'] = $_POST['data'];
$ricambio['venditore'] = $_POST['venditore'];
$ricambio['dossier'] = $_POST['dossier'];
$ricambio['ordine'] = $_POST['ordine'];
$ricambio['cognome'] = $_POST['cognome'];
$ricambio['indirizzo'] = $_POST['indirizzo'];
$ricambio['marca'] = $_POST['marca'];
$ricambio['modello'] = $_POST['modello'];
$ricambio['targa'] = $_POST['targa'];
$ricambio['telaio'] = $_POST['telaio'];
$ricambio['cilindrata'] = $_POST['cilindrata'];
$ricambio['alimentazione'] = $_POST['alimentazione'];
$ricambio['catalizzatore'] = $_POST['catalizzatore'];
$ricambio['KM'] = $_POST['KM'];
$ricambio['porte'] = $_POST['porte'];
$ricambio['colore'] = $_POST['colore'];
$ricambio['sinistri'] = $_POST['sinistri'];
$ricambio['garanzia'] = $_POST['garanzia'];
$ricambio['IVA'] = $_POST['IVA'];
$ricambio['percentualeammortamento'] = $_POST['percentualeammortamento'];
echo json_encode($ricambio);

?>

有什么解决办法吗?也许问题是选项:[] 在

 try NSJSONSerialization.JSONObjectWithData(parameters, options:[]

当将 json 正文发布到 PHP 时,它不会自动将 json 字符串解码为 $_POST 超全局。

尝试类似的东西

$jsonBody = file_get_contents('php://input');
$decoded = json_decode($jsonBody);
var_dump($decoded);