如何从 Node.js 中的 ajax 帖子返回成功

Posted

技术标签:

【中文标题】如何从 Node.js 中的 ajax 帖子返回成功【英文标题】:How to return success from ajax post in Node.js 【发布时间】:2014-05-14 06:49:11 【问题描述】:

我有这样的功能:

exports.saveAction = function (req, res) 
    var conn = mysql.createConnection(
        host     : nconf.get("database:host"),
        //port: 3306,
        user     : nconf.get("database:username"),
        password : nconf.get("database:password"),
        database : nconf.get("database:database"),
        multipleStatements: true,
        //ssl: 'Amazon RDS'
    );
    var action = req.body;   
    conn.query('UPDATE actions SET ? WHERE Id = ?', 
                  [action, action.Id], function (err, result) 
        conn.end();
        if (err) throw err;
        res.writeHead(200,  "Content-Type": "application/json" );
        res.end("Updated Successfully");
    );
;

我返回“200”,但它总是在如下所示的错误子句中返回:

$.ajax(
    url: "/api/action/SaveAction",
    type: "PUT",
    data: ko.toJSON(self.stripDownObj()),
    datatype: "json",
    contentType: "application/json; charset=utf-8",
    success: function (result) 
        console.log(result);
        if(result.status == 200)
            self.isEditMode(!self.isEditMode());
        
    ,
    error: function(result)
        console.log(result);
    
);

注意:sql查询成功并保存数据。

【问题讨论】:

随便res.send(result:"success") nodejsreactions.tumblr.com/post/78336069976/if-err-throw-err 【参考方案1】:

在您期待 JSON 时返回 JSON

res.end('"success" : "Updated Successfully", "status" : 200');

然后

$.ajax(
     ....
    datatype: "json", // expecting JSON to be returned

    success: function (result) 
        console.log(result);
        if(result.status == 200)
            self.isEditMode(!self.isEditMode());
        
    ,
    error: function(result)
        console.log(result);
    
);

在 Node 中,您始终可以使用 JSON.stringify 来获取有效的 JSON

var response = 
    status  : 200,
    success : 'Updated Successfully'


res.end(JSON.stringify(response));

Express也支持做

res.json(success : "Updated Successfully", status : 200);

它将对象转换为 JSON 并自动为您传递适当的标头。

【讨论】:

@cookiemonster - 重要的是,如果它不是有效的 JSON,jQuery 在尝试解析它时会抛出一个解析错误。 这有关系吗?我不确定用简单的字符串响应会破坏任何东西。 ...抱歉,更新了我的评论,但您基本上已经回复了新评论。我错过了发送的不是完整的字符串语法,这也不是真正有效的,除了 JS 解析器似乎允许它。 +1 @cookiemonster - 是的,JSON 响应并没有真正的状态属性,所以必须手动添加,JSON 仅对双引号等有效。 @adeneo - 如果我想在成功的结果后在帖子中执行 res.redirect() 怎么办?

以上是关于如何从 Node.js 中的 ajax 帖子返回成功的主要内容,如果未能解决你的问题,请参考以下文章

通过 node.js 的 ajax 跨域发布

Laravel ajax 帖子返回 500 内部服务器错误

我们如何将字符串从回调函数返回到 node.js 中的根函数?

如何从 AJAX 帖子中获取 Flask 中的数据

如何从 node.js Express 发送 POST 请求?

如何将 JQuery AJAX 请求中的数据发送到 Node.js 服务器