Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用node.js/express将数据保存到mysql,无需刷新页面_Javascript_Mysql_Node.js - Fatal编程技术网

Javascript 使用node.js/express将数据保存到mysql,无需刷新页面

Javascript 使用node.js/express将数据保存到mysql,无需刷新页面,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在学习node.js,我已经通过表单提交将数据保存到mysql中。代码如下所示: app.post('/auth', function(request, response) { let date = request.body.date; let user = request.body.user; let email = request.body.email; connection.connect(function(err) {

我正在学习node.js,我已经通过表单提交将数据保存到mysql中。代码如下所示:

    app.post('/auth', function(request, response) { 
    let date = request.body.date;
    let user = request.body.user;
    let email = request.body.email;
    connection.connect(function(err) {
                if (err) throw err;
                console.log("Connected!");
                var sql = "INSERT INTO demotable (date, user, email) VALUES (?,?,?)"; 
                connection.query(sql, [date, user, email], function (err, result) {
                  response.end(); 
                });
              });
});

这是可行的,数据被添加到表中,但因为我使用了input submit,所以之后我会进入一个新页面/auth。我需要在不更新或刷新整个页面的情况下更新数据库,这意味着我不能使用提交表单。实现这一点的最佳方法是什么?

我通过在客户端使用AJAX POST请求来实现这一点。 与其让按钮提交表单,不如让它执行具有onclick属性的函数。您可以使用每个输入的ID获取它们的值。至于服务器端路由,只需使用res.send或任何您希望发送简单响应的命令。在下面的函数中,收到的响应非常简单。在您的路径上,如果身份验证失败,只需执行res.send{status:failed}之类的操作,AJAX调用就会收到该消息,请查看响应callback.status失败并向用户发出警报,与res.send调用中的身份验证是否成功相同。希望这有帮助

function authenticate() {
    $.ajax({
        type: "POST",
        url: "/auth",
        data: {
            "date": Date.now(),
            "user": document.getElementById('usernameInput').value,
            "email": document.getElementById('emailInput').value
        },
        success: function(data) {
            if(data.status == "success") {
                alert("successfully authenticated!")
            } else if(data.status == "failed") {
                alert("failed authentication!")
            }
        }
    });
}

我使用了bobmartin1234提供的代码。在服务器端,我编写了以下代码:

app.post('/auth', function(request, response) { 
let user = request.body.user 
let email = request.body.email;
let date = new Date(); //I added the date on the serverside instead

connection.connect(function(err) {
    if (err) throw err;
    console.log("Connected!");
    var sql = "INSERT INTO demotable (date, user, email) VALUES (?,?,?)"; 
    connection.query(sql, [date, user, email], function (err, result) { 
      if (err) throw err;
      console.log("1 record inserted");
    });
  });
});

如果您不想导航到新页面或重新加载现有页面,则可能需要使用ajax post而不是表单提交来完成此操作@dusthaines-这不是一个JQuery问题,你为什么这样对待它?非常感谢你的帮助!我用了这个,效果很好。如果你有一个有效的例子,学习总是容易得多。