【问题标题】:Express: getting ajax response from serverExpress:从服务器获取 ajax 响应
【发布时间】:2015-02-12 02:00:09
【问题描述】:

我想使用 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');
            }
        });
    }
});

当我尝试这个时,我在控制台窗口中完全没有得到任何东西。我能做什么?

这是我得到的:

【问题讨论】:

  • 在浏览器中查看网络标签,请求是否发送?
  • GET 请求页面的状态为 304(因此未更改),POST 请求的状态为 200(正常)。数据在服务器上接收,因为我可以在那里显示。
  • POST 请求的响应是什么?
  • 我什么也得不到。在$.ajax 调用中,我在完成、成功和错误时执行console.log,但什么都没有。
  • 看我的回答,我想你的视图正在重新渲染,尝试从登录路径取得真正的成功

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


【解决方案1】:

你的反应是好的。我的事情你已经将成功设置为 false 所以它不会发送回数据它正在重新渲染相同的视图所以控制台上什么都没有

正在运行的线路是

        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});
    }
});

【讨论】:

  • 当我将success 设置为true 时,它只会转到我的home 页面。我把它放到false 以测试ajax 响应。
  • 好吧,比在 else 块中发送这个 res.json({"success":false});
  • 并在执行此操作后查看您的控制台
  • 但是当我只是使用res.json 发送json 时,它会在一个空白的HTML 页面中打印JSON,并且控制台中仍然没有任何内容。
  • 你删除了 res.render('index', {login: false}); ?
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-18
    • 2016-09-24
    相关资源
    最近更新 更多