ajax请求从nodejs中的表单发布未定义的数据

时间:2017-06-29 09:37:22

标签: javascript jquery node.js ajax

我正在尝试制作一个评论表单,在博客架构数组中添加注释 但是当我使用ajax时,它在我有控制台日志的地方下面给出了undefined,当我使用简单的post请求时,它工作正常。 我正在使用mongoose,nodejs,express,jquery ajax 我的脚本如下

var frm = $('#commentForm');

frm.submit(function (e) {
    e.preventDefault();
    console.log('clicked');
    $.ajax({
        type: 'POST',
        url: "/blog/addComment",
        contentType: "application/json; charset=utf-8",
        dataType: 'json'
        })
        .done(function(data) {
            addNewComment(data);
        })
        .fail(function() {
            console.log("Ajax failed to fetch data");
        });
});

function addNewComment(data){
    console.log(data);
}

我的路线如下

//add comments
router.post('/addComment',function(req,res,next){
    console.log(req.body.comment+" "+ req.body.userId+" "+req.body.postId);
    var newComment = {
        'text': req.body.comment,
        'author': req.body.userId
    }
    Post.addComment(req.body.postId, newComment, function(err,comment){
        if(err) throw err;
        console.log(comment);
        res.send(comment);
    });
});

我的mongoose架构是

//add comments
module.exports.addComment = function( postId, newComment, callback){
    var query = { '_id': postId};
    console.log('postid: '+postId+"  newcomment: "+newComment.text+ " "+newComment.author);
    Post.findOneAndUpdate( query, { $push:{'comments': newComment} }, {new:true} , callback);
}

1 个答案:

答案 0 :(得分:0)

那是因为ajax调用中没有定义数据, 使用以下提供frm是actallu形式或使用  使用数据:表单name.serialize()

var frm = $('#commentForm');
frm.submit(function (e) {
e.preventDefault();
console.log('clicked');
$.ajax({
    data : $(this).serialize(),
    type: 'POST',
    url: "/blog/addComment",
    contentType: "application/json; charset=utf-8",
    dataType: 'json'
    })
    .done(function(data) {
        addNewComment(data);
    })
    .fail(function() {
        console.log("Ajax failed to fetch data");
    });
});