javascript - 获取 JSON 数据时遇到问题

标签 javascript ios json swift

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

最佳答案

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

关于javascript - 获取 JSON 数据时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43142093/

相关文章:

Javascript/jQuery 更改 <img src =""> onclick 带循环

javascript - 数组 forEach 不返回 bool 值

ios - UIView 动画 - 展开时意外发现 nil

ios - 有什么方法可以知道 UITextField 是否在 View 的层次结构中?

ios - 如何为正在编辑的内容提供自定义 UITableViewCell 上下文?

javascript - 为什么对 JS 使用 Camel Case 而对数据库使用 Snake Case?

json - 从 map 结构保存读取/写入/保存到 json

javascript - 重新调整谷歌地图的大小并重新居中,无需访问全局变量 "map"

javascript - 如何使用 chartjs.org 使用数组中的数据创建图表?

javascript - 在 jQuery 中解析 Json 数组