Express:从服务器获取ajax响应

时间:2014-12-13 13:18:38

标签: jquery ajax json node.js jquery-validate

我想使用ajax将一些表单数据发送到服务器,检查它并将结果返回给客户端。目前,我没有收到任何数据。我不明白我必须改变什么才能让它发挥作用。

服务器端:

在我的快递中app.js

var login = require('./routes/login');
app.use('/login', login);

在我的login.js路线中:

router.post('/', function (req, res) {
    var loginObject = req.body;
    console.log(loginObject);
    var success = false; //This is just for testing!!
    if (success) {
        req.session.user = loginObject.email;
        req.session.userID = 1; //Stubbing
        res.render('home');
    } else {
        res.json({'success': false});
    }
});

客户端:

在我的index.jade文件中:

script(src='/javascripts/login_window.js')

在我的login_window.js文件中(使用jQuery Validation插件):

$('#loginForm').validate({
    rules: {
        modalMail: {
            required: true,
            email: true
        },
        modalPass: {
            required: true,
            minlength: 8
        }
    },
    errorPlacement: function(error, element) {
        element.closest('div.form-group').removeClass('has-success').addClass('has-error');
    },
    success: function(label, element) {
        $(element).closest('div.form-group').addClass('has-success').removeClass('has-error');
    },
    submitHandler: function (form) {
        $.ajax({
            url: '/login',
            type: 'POST',
            dataType: 'json',
            data: form,
            contentType: 'application/json',

            complete: function() {
                console.log('process complete');
            },
            success: function(data) {
                console.log(data);
                console.log('process success');
            },
            error: function() {
                console.log('process error');
            }
        });
    }
});

当我尝试这个时,我在控制台窗口中什么都没有。我该怎么办?

这就是我得到的:

console

2 个答案:

答案 0 :(得分:0)

你的回答没问题。我把你的成功设置为假,所以它不会发送回数据,而是重新呈现相同的视图,所以在控制台上没有任何内容

正在运行的行是

        res.render('index', {login: false});

测试

更改

  var success = true;

其次,不是渲染视图,而是可以在ajax请求上发送json数据或某些东西

router.post('/', function (req, res) {
    var loginObject = req.body;
    console.log(loginObject);
    var success = false; //This is just for testing!!
    if (success) {
        req.session.user = loginObject.email;
        req.session.userID = 1; //Stubbing
        res.json({"success":true});
    } else {
        res.json({"success":false});
    }
});

答案 1 :(得分:0)

我认为你的问题在这里,否则,这是另一个问题......

submitHandler: function (form) {
    $.ajax({
        ...
        data: form, // <--
        ...

插件的form参数只代表插件的表单对象。

您需要一个jQuery选择器并使用.serialize()之类的东西来获取实际数据......

submitHandler: function (form) {
    $.ajax({
        ...
        data: $(form).serialize(),
        ...