Ajax post响应返回empy对象

时间:2018-03-30 20:05:06

标签: javascript jquery node.js ajax express

我最近开始使用Node.js和jQuery,但我无法弄清楚我项目中的错误。 我有一个客户端应用程序发送一个post请求到节点js服务器;此服务器从帖子获取数据并执行查询;最后它应该向客户端发送一个包含从上一个查询中检索到的信息的json。问题是节点js发送的响应是一个空对象({}),我不知道为什么。 这是我的源代码:

节点JS:

var http = require("http");
var url = require('url');
var querystring = require('querystring');
var express = require('express');
var cookieParser = require('cookie-parser');
var mysql = require('mysql');


var con = mysql.createConnection({
    host: "",
    user: "",
    password: "",
    database : ''
});


var app = express();
app.use(express.static(__dirname + '/public'))
    .use(cookieParser());


app.post('/search',function(req, res) {
    if (req.method == 'POST') { //PUT Only
        var body = '';
        req.on('data', function (data){body += data;});
        req.on('end', function () {
            var post = querystring.parse(body);
            console.log("Dati in ingresso > " + JSON.stringify(post));
            //res.writeHead(200, {'Content-Type': 'text/plain'})
            query("SELECT Nome FROM Mood WHERE Nome LIKE \'" + post.data  + "%\'",res);
        });
    }else{
        console.log("Not POST request")
        res.end();
    }
});

var query = function(q,res) {
    var results = {};

    con.query(q, function (err, result, fields) {
        if (err) throw err;
        results = JSON.stringify(JSON.parse(JSON.stringify(result))[0].Nome);
        console.log("Risultati query: ");
        console.log(results);
    });
    res.json(results);
    res.end();
}
app.listen(8888);

客户端:

$("document").ready(function () {
    $('#search-box').on('input propertychange', function(e){
        var input = $(this).val();
        var array = ['prova1','prova2','prova3'];
        var ul = $('#results-options ul');

        $.ajax({
            type: "POST",
            url: "/search",
            data: {data : input},
            contentType: "application/json",
            success: function(d) {
                console.log(d);
                console.log(JSON.stringify(d));
                console.log(JSON.parse(d));
            },
            error: function(d) {
                console.log("Error");
            }
        });

        $('#results-options').show();
    });
    $("#results-options").on('click',function (e) {
        $('this').show();
        e.stopPropagation();
    })
    $(document).on('click', function(){
        $('#results-options').hide();
    })
});

1 个答案:

答案 0 :(得分:1)

如上所述,您的Content-Type函数在对数据库的查询完成之前发回响应。这就是它回归空虚的原因。我将query代码移到了数据库查询的回调中。

res.json(results); res.end();