在AJAX POST之后渲染EJS页面

时间:2017-11-13 11:08:11

标签: jquery node.js ajax ejs

我在我的代码中实现了一个Ajax调用来发送有关表单提交事件的信息,但是如果插入查询有效,我现在需要render o redirect到特定的EJS页面或不。

它曾经在没有Ajax调用的情况下工作,但现在每当我点击提交按钮时查询都有效,但是页面没有被重定向

以下是代码:

客户端

$(function() {
    $('#addForm').on('submit', function(e) {
        e.preventDefault();
        var titolo = $(this).find("#title").val();
        var time = $(this).find("#time").val();
        var tags = []; 
        var tagsCont = $(this).find(".chip");
        var tmpTag;
        for(var i = 0; i < tagsCont.length; i++){
            tmpTag = $(tagsCont[i]).html().split('<')[0];
            tags.push(tmpTag);
        }
        var data = {titolo: titolo,time: time, tags: tags};
        var dataSend = $.ajax({
            type: "POST",
            url: "/add",
            data: JSON.stringify(data),
            cache: false,
            contentType: "application/json"
        });
        dataSend.done(function(data){
            if(!data.status)
                console.log("Error on data send");
            return;
        });
        dataSend.fail(function (jqXHR, textStatus) {
            console.log("Error on data send " + textStatus);
            return;
        });

    });
});

服务器

var addPost = function(req, res, next) {
    if(!req.isAuthenticated()){
        return res.redirect('/login');
    }
    else {
        var user = req.user;
        if(user === undefined)
            return res.redirect('login');
        else{
            user = user.toJSON();
            var timerPromise = null;
            timerPromise = new Timer().fetch();
            console.log(req.body);
            return timerPromise.then(function(model){
                var creation = new Date();
                var timerVal = req.body.time;
                var ended = false;
                var owner = user.id_user;
                var title = req.body.titolo;
                if(title.length <= 0)
                    return res.render('add.ejs', {
                        title: "Timing Time - Add Timer",
                        user: user,
                        errorMessagge: "Va dichiarato un titolo"
                    });
                var new_timer = new Timer({
                    titolo: title,
                    time: timerVal,
                    created: creation,
                    ended: ended,
                    id_owner: owner
                });
                new_timer.save(null, {method: "insert"}).then(function(model) {
                    if(!model)
                        return res.render('add.ejs', {
                            title: "Timing Time - ERROR",
                            user: user,
                            errorMessagge: "Problemi di inserimento del timer"
                       });
                    return res.redirect('/');
                });

            });
        }   
    }
}

1 个答案:

答案 0 :(得分:1)

当通过ajax接收响应时,无论您在后端重定向到哪个URL,都不会影响前端。您应该在客户端进行重定向。

dataSend.done(function(data){
        if(!data.status)
            console.log("Error on data send");
        else
            location.href = '/';
        return;
    });