【问题标题】:Cannot get data from AJAX POST success function Express / mySQL无法从 AJAX POST 成功函数 Express / mySQL 获取数据
【发布时间】:2017-04-23 19:42:12
【问题描述】:

我有来自客户端的以下 AJAX 后调用:

function get_game_id(){
    $.ajax({
         type: "POST",
         url: "/game",
         data: {
             homeTeam: homeTeam,                     
             awayTeam: awayTeam,
             date:date
               },
         cache: false,
         success:function(results){
             alert(results.insertId)
         }
    })
}

上面的警报是空的。 在服务器上,我成功地将数据插入到数据库中:

router.post('/', function(req, res) {

console.log(req.body.homeTeam,req.body.awayTeam);

var connection = mysql.createConnection(global.dbSettings);
connection.connect(function(err,res) {


    if (err) {
        console.log(err);
    } else {
        console.log("connected.");

        connection.query(
            "INSERT INTO game(homeTeam,awayTeam,game_date) VALUES (?,?,?)",
            [req.body.homeTeam,req.body.awayTeam,req.body.date],
            function (err, results) {
                if (err) {
                    console.log(err);
                } else {
                    console.log("Game Created with Game_ID:"+results.insertId);
                    console.log(req.body.homeTeam,req.body.awayTeam,req.body.date);

                }
            });


            connection.end(function (err) {
                if (err) {
                    console.log("The connection could not be closed.");
                } else {
                    console.log("The connection is closed.");
                }
            });
    }


             });

       res.end();
});

数据插入正确。 insertId() 函数正常工作,因为 results.insertId 正在打印到控制台。我只是无法将其发送给客户。

我在客户端需要这个。我认为它应该可以在成功函数中访问,但所有内容都是“TRUE”。

有人可以请给我解释一下如何将它发回给客户吗?

【问题讨论】:

    标签: mysql ajax node.js express


    【解决方案1】:

    您没有将刚刚发送的数据返回给客户端,仅仅是因为您没有发送,而是结束了响应。

    要么将req.body 中的内容发回,要么查询刚刚保存的所有内容,返回。 你可以这样做:res.send({homeTeam: req.body.homeTeam, ....}

    顺便说一句,您正在执行“POST”,通过这样做从服务器取回数据是没有意义的。您应该做的是向客户端发送“200”的响应,并可能使用您刚刚保存的数据更新您的页面,因为收到200,您知道数据已保存,因此您不会浪费时间查询/发送背部。你可以这样做:

    res.status(200).send('data saved');
    

    【讨论】:

    • 感谢您的回复,但我想要实现的是返回最后插入行的主键。有一个带有 mySQL 的 insertId() 的内置函数正是为此而设计的。该函数的关键是它始终发送插入的最后一行“我”的 id - 并且它在同一个连接中完成,使用 GET 可以为您提供其他人插入的行的 id(紧接在我之后)。这在包含上述插入语句的函数中可供我使用 (results.insertedId) - 但我似乎无法将它传递给任何地方,至少不能单独返回给客户端。
    • 不确定我是否理解得很好,但如果我理解了,你可以通过“GET”而不是“POST”来发送你的数据,你的参数会暴露在 url 中,不确定是否这将是一个问题。然后,您只需将您想要的主键返回给客户端。您应该在回调函数中的else 语句中发送此响应,否则您无法保证密钥存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2020-10-22
    相关资源
    最近更新 更多