【问题标题】:Send data from server(nodejs) to client(ajax request)将数据从服务器(nodejs)发送到客户端(ajax 请求)
【发布时间】:2013-08-13 18:02:45
【问题描述】:

如何使用 nodejs 将数据从服务器发送到客户端?

所以基本上我通过点击一个按钮来调用这个函数

javascript

function createStuff(tid) {
    $.ajax({
        type: "POST",
        url: '/create/',
        data: {tid: tid}
        success: function(id) {
            doStuff(id);
        },
        error: function(jqXHR, textstatus, errorThrown) {
            alert('text status ' + textstatus + ', err ' + errorThrown);
        }
    });
};

然后处理请求

服务器

exports.create = function(req, res) {
    new Stuff({
        content: "random stuff"
    }).save(function(err, stuff) {
        Otherstuff.update({_id: req.body.tid}, {$push: {stuffes: stuff}}, {upsert: true}, function(err, mvar) {
            res.redirect(301, '/' + req.body.tid);
        });
    });
};

但我需要将新创建的 stuff._id 与 res.redirect 一起发送。问题是我不想将它作为 res.redirect(301, '/' + req.body.tid + '/' + stuff._id) 发送,因为我必须做一个全新的路由器显得灵活。此外,当我执行此请求时,网页不会重新加载,这正是我想要的。

我尝试使用 res.send(stuff._id),但我只能执行一次(因为连接似乎在它之后关闭)。我正在使用以下库:mongoose、jquery、express

【问题讨论】:

    标签: ajax node.js express mongoose


    【解决方案1】:

    如果我理解正确,您想用您在请求中获得的原始 id 以及新生成的 id 回复客户。 我不明白的是,如果您不想重新加载任何页面,为什么要使用redirect

    你可以很简单,

    var obj = {
        tid: req.body.tid,
        _id: stuff._id
    };
    
    res.send(JSON.stringify(obj));
    

    而且,ajax 成功处理程序将是

    success: function(data) {
        var obj = JSON.parse(data);
        var id = obj._id;
        doStuff(id);
    }
    

    我想这就是你想要的。

    编辑:

    正如 deitch 所指出的,express 本身会将对象转换为 JSON 字符串,并为 JQuery 添加一个 Content-Type 标头以正确识别字符串并将其解析为 JSON 对象。所以不需要stringifyparse数据。

    【讨论】:

    • 是的,这正是我所追求的!我是 node.js 的新手(以及一般的服务器端编程),所以我一直在每个路由器的末尾使用重定向(尽管即使使用重定向,当我动态添加内容时客户端也没有更新),因为我认为我需要在每个路由器的末端有某种响应。如果我不需要发回任何东西,我只有 res.end();然后代替 res.redirect 或 res.send?
    • 很高兴知道这很有帮助... :)
    • 如果您使用 express,您甚至不需要 JSON.stringify(obj),它会为您完成,只需 res.send({a:1,b:2})。同样,jQuery 会在客户端自动为您转换。
    • @deitch 我认为 JQuery 只有在您 getJSON() 或在请求中添加 dataType: 'json' 时才会转换。
    • @deitch 刚刚检查过,它可以工作。更新答案。谢谢.. :)
    猜你喜欢
    • 2020-08-17
    • 2022-01-12
    • 2013-01-25
    • 2015-03-05
    • 1970-01-01
    • 2015-05-23
    • 2019-05-09
    • 1970-01-01
    • 2020-02-28
    相关资源
    最近更新 更多