2017-03-31 127 views
0

我對於使用JavaScript進行後端編程非常新穎,並且編寫了一些代碼來查詢數據庫並將結果作爲JSON返回。它似乎在瀏覽器中正常工作,但我的iOS代碼沒有從它獲取任何數據。測試時我已經在本地運行了。如果你看看我的Swift從URL獲取數據,我會從catch語句的print語句中獲得NO JSON。獲取JSON數據時遇到困難

的JavaScript

'use strict'; 
var util = require('util'); 
var sql = require("mssql"); 
var express = require('express'); 
var port = process.env.PORT || 1337; 

var membershipNumber; 
var queryString; 

var app = express(); 

app.get('/membership/:number', function (req, res) { 
    console.log("\nPARAMS:"); 
    console.log(req.params.number); 

    membershipNumber = req.params.number; 
    queryString = util.format('SELECT major_key, company, status, paid_thru FROM name WHERE major_key = \'%s\' and member_record = 1', membershipNumber); 
    console.log("\nQUERY:"); 
    console.log(queryString); 

    res.setHeader('Content-Type', 'application/json'); 
    res.set('Content-Type', 'application/json'); 
    membershipStatusQuery(queryString, res); 
}); 

app.get('/', function (req, res) { 
    var dictionary = []; 
    dictionary.push({ 
     key: "none" 
    }); 
    var jsonDict = JSON.stringify(dictionary); 

    res.setHeader('Content-Type', 'application/json'); 
    res.set('Content-Type', 'application/json'); 
    res.send(jsonDict); 
}); 

function membershipStatusQuery(query, response) { 
    var config = { 
     server: 'DB_Server', 
     database: 'testDB', 
     user: 'sa', 
     password: 'password', 
     port: 1433 
    }; 

    var connection = new sql.Connection(config); 

    connection.connect().then(function() { 
     var req = new sql.Request(connection); 
     req.query(query).then(function (recordset) { 
      connection.close(); 
      response.send(results); 
     }) 
      .catch(function (err) { 
       console.log(err); 
       connection.close(); 
       response.send(err); 
      }); 
    }) 
     .catch(function (err) { 
      console.log(err); 
      response.send(err); 
     }); 
} 

app.listen(port, function() { 
    console.log("Listening on port %s", port); 
}); 

成績

[{"major_key":"0001354648","company":"Membership of David Metzgar","status":"A","paid_thru":"2017-10-31T00:00:00.000Z"}] 

iOS的Swift代碼 類從URL獲取JSON:

import UIKit 

class GetJSON: NSObject { 

    func getJSONFrom(urlString: String) -> JSON { 
     let url = URL(string: urlString) 
     var data = Data() 

     do { 
      data = try Data(contentsOf: url!) 
     } catch { 
      print("No JSON") 
      // TODO: Display error 
     } 

     let json = JSON(data: data) 
     return json 
    } 
} 
從另一個類

方法使用JSON:

func getQueryResultsJSON() { 
     print("http://localhost:1337/membership/\(memberNumberTextField.text!)") 
     // let jsonURL = "http://localhost:1337/membership/\(memberNumberTextField.text!)" 
     let jsonURL = "http://localhost:1337/membership/0001354648" 
     let getJSON = GetJSON() 
     self.resultsArray = getJSON.getJSONFrom(urlString: jsonURL) 
     if let dictionary = resultsArray?[0].dictionaryObject { 
      if let status = dictionary["status"] { 
       if status as! String == "A" { 
        print(dictionary) 
        print("Provided membership is active") 
        // membership is active 
        // TODO: save info and display membership card 
       } else { 
        print(dictionary) 
        print("Provided membership is NOT active") 
        // membership is not active 
        // TODO: display alert 
       } 
      } else { 
       print("DOESN'T EXIST!") 
       // membership number does not exist 
       // TODO: display alert 
      } 
     } else { 
      print("NOTHING!") 
     } 
    } 

回答

0
 let url = NSURL(string: "your url")! 
     let request = NSMutableURLRequest(url: url as URL) 
     // request.httpMethod = "POST" 
     // request.httpBody = jsonData 
     //request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type") 

     let task = URLSession.shared.dataTask(with: request as URLRequest){ data,response,error in 
      if error != nil { 

       return 
      } 

      do { 
       let userObject = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: String] 
       if userObject != nil { 

        // do something 
       } 

      } catch let jsonError { 
       print(jsonError) 
       print(String(data: data!, encoding: String.Encoding.utf8)!) 
      } 
     } 

     task.resume() 
+0

我使用SwiftyJSON和所有我在的getJSON代碼工作與其他網絡的API。 – raginggoat