从节点服务器发送数据到ajax

时间:2020-05-14 22:20:51

标签: javascript jquery node.js json ajax

我需要检查用户输入的令牌是否存在,

我的节点js控制器:

const checktoken = async (req, res) => {
    const token = req.body.token

    User.findOne({'token': token }).then((user) => {
        if (user) {
            return res.end("GOOOOD");
        }
        return res.end("Baad");
    })
    .catch((err) => console.log(err))   
}

Ajax端:

$(document).ready(function(){
    $('#form').submit(function (e) {
        // e.preventDefault()

        $.ajax({
            type: 'POST',
        url: '/api/token/'
        })
        .done(function(data) {
            alert(data)
        })
        .fail(function(xhr, status, error) {
            console.log("Errrrrrr       " + error);
        })
        .always(function(data){
        });
    })
})

html格式:

<form class="form-inline search-form"  action ="/api/token" method="POST" id="form">
    <div class="form-group label-floating">
        <input name ="token" id="token" >
    </div>

    <button id="subBut" type ="submit"> Verify  </button>
</form>

问题是,无论好坏,我总是会收到警报(BAD令牌),然后以文本格式打印另一页效果很好

例如,如果我放置了良好的令牌:警报是错误的令牌,则打印了另一页:良好的令牌(这意味着来自节点的结果是可以的)AJAX问题

1 个答案:

答案 0 :(得分:1)

首先,您要提交两次,因为form将提交,而ajax呼叫也将触发。更改对form的操作,以确保它不会尝试自行发布(或者,您可以在提交处理程序中取消对e.preventDefault的注释)。另外,您没有在ajax调用中包含任何数据:

<form class="form-inline search-form" action ="javascript:void(0)" id="form">
    <div class="form-group label-floating">
        <input name ="token" id="token" >
    </div>

   <button id="subBut" type ="submit"> Verify  </button>
</form>
$(document).ready(function(){
    $('#form').submit(function (e) {
    // e.preventDefault()

        $.ajax({
            type: 'POST',
            contentType: 'application/json',
            url: '/api/token/',
            data: JSON.stringify({ token: $('#token').val() })
        })
        .done(function(data) {
            alert(data)
        })
        .fail(function(xhr, status, error) {
            console.log("Errrrrrr       " + error);
        })
        .always(function(data){
        });
    })
})

您尚未包含Express设置代码,但这需要行app.use(Express.json())或(express.json()(取决于您命名导入的内容)的行)才能将主体从JSON解析为对象