【问题标题】:How to return success from ajax post in Node.js如何从 Node.js 中的 ajax 帖子返回成功
【发布时间】: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查询成功并保存数据。

【问题讨论】:

标签: javascript jquery ajax node.js express


【解决方案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() 怎么办?
猜你喜欢
  • 2016-08-27
  • 2017-09-28
  • 2020-07-11
  • 2014-09-03
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
相关资源
最近更新 更多