无法获取JSON数据

时间:2017-03-31 13:35:13

标签: javascript ios json swift

我很擅长使用JavaScript进行后端编程,并编写了一些代码来查询数据库并将结果作为JSON返回。它似乎在浏览器中正常工作,但我的iOS代码没有从中获取任何数据。在测试时,我现在在本地运行它。如果你查看从我的Swift获取URL中的数据,我将从catch中的print语句中获取NO 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 Code 从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!")
        }
    }

1 个答案:

答案 0 :(得分: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()