jquery - Node Js - 使用 ajax 从 Bootstrap 表单更新用户密码

标签 jquery node.js ajax mongodb twitter-bootstrap

我试图让用户更新密码而不重新加载页面,但我不断收到 POST/user?userid=something 404 错误。谁能发现我做错了什么吗?谢谢。

Bootstrap 模式

       <form method="post">
            <div class="modal-body">
                    <div class="form-group">
                        <label for="password">New password</label>
                        <input type="password" class="form-control" name="password" id="password" placeholder="Password" onkeyup='checkPassword();' required>
                    </div>
                    <div class="form-group">
                        <label for="confirmPassword">Confirm new password</label>
                        <input type="password" class="form-control" id="confirmPassword" placeholder="Re-enter your password" onkeyup='checkPassword();' required>
                        <span id='message'></span>
                    </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                <button id="submit" type="submit" class="btn btn-primary" disabled>Save changes</button>
            </div>
        </form>

ajax脚本

<script>
$(function(){
    $('#submit').on('submit', function(e){
        e.preventDefault();
        var new_password = $('#password').val();
        $.ajax({
            url: '/user',
            type: 'post',
            data: new_password,
            success: function(data){
                alert(data)
            }
        });
    });
});

index.js - 服务器端

router.post('/user'), function (req, res) {
    User.updateOne({ '_id' :  req.query.userid }, {$set: {password: createHash(req.body.password)} });
}

最佳答案

它不起作用的原因是你没有方法:'POST'而且你发送的数据不是对象而是值。如果您想使用 req.body.password,您应该将其发送为 {password:"thepassword"}

还要在数据中传递用户 ID,因为它不是 GET

$(function(){
    $('#submit').on('submit', function(e){
        e.preventDefault();
        var data = {
            userid: "theUserId",
            password: $('#password').val()
        }

        $.ajax({
            url: '/user',
            method : 'POST'
            data: data,
            success: function(data){
                alert(data)
            }
        });
    });
});

并且在 route 您必须发回状态正常。

//you should use body-parser middleware for this

router.post('/user', function (req, res) {
    User.updateOne({ '_id' :  req.body.userid }, {$set: {password: createHash(req.body.password)} });
    //you have to inform the client what happened!
    res.status(200).send();
}

关于jquery - Node Js - 使用 ajax 从 Bootstrap 表单更新用户密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49327678/

相关文章:

node.js - CouchDB 在必填字段验证时返回 HTTP 403

javascript - ajax 调用后获取旧数据(get 方法)Laravel 5.5

javascript ajax POST 问题

带有 setTimeout 的 jQuery live 函数

javascript - 滚动时堆叠 div

jquery .width() chrome 和 safari 问题

node.js - Mongoose 查询改变对象顺序

jquery - 如何使固定顶部 Bootstrap 菜单背景只粘在右边或左边?

node.js - Cheerio 返回不在 dom 中的文本

asp.net - 将 jQuery 用于 AJAX 和 ASP.NET Webforms